发表于: 2017-05-23 20:08:14

1 945


域名,Cookie是什么?有什么用处?Cookie 和session的区别?Cookie的有效期

1.背景介绍

网站为什么要有域名?
①.什么是IP地址

我们知道,在Internet上有千百万台主机,为了区分这些主机,人们给每台主机都分配了一个专门的地址,称为IP地址。 通过IP地址就可以访问到每一台主机。我们的每个虚拟主机用户,都分配一个永久的IP地址。

②.什么是域名

虽然可以通过IP地址来访问每一台主机,但是要记住那么多枯糙的数字串显然是非常困难的,为此,Internet提供了 域名(Domain Name)。域名是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标 识计算机的电子方位(有时也指地理位置,地理上的域名,指代有行政自主权的一个地方区域)。例如“IT修真院”主机 的域名就是“jnshu.com”。

什么是cookie

Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端 上的数据(通常经过加密)。定义于 RFC2109 和 2965 中的都已废弃,最新取代的规范是 RFC6265[1] 。(可以 叫做浏览器缓存)

什么是session

Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。

2.知识剖析

域名的用处

①终端必备——用域名建站

域名可以用来建站,从而实现价值最大化。但凡想要在互联网上 大展拳脚的企业,都需要有一个域名来为自己开路。 域名是网站的门面,是用户访问平台的重要途径,是一个流量入口,同时也是企业立足于互联 网的根本,对其项目开发及运营具有重要作用。

②宣传之需——借域名提升品牌形象

域名之所以备受终端喜爱,还有一个重要的原因是能够帮助企业进行广告宣传,促进品 牌推广,从而获取更多的流量。再土豪的企业,也没法天天烧钱做广告,但是有一个契合品牌的好域名就不一样了,它 能够剩下一笔广告费,有助于提升品牌形象。

Cookie的用处

①.保存用户的登陆状态,例如上例中的,用户进行登陆,成功登陆后,服务器生成特定的cookie返回给客户端,客户端下次访 问该域名下的任何页面,将该cookie的信息发送给服务器,服务器经过检验,来判断用户是否登陆。

②.记录用户的行为,例如,京东商场左下角有一个最近访问的产品记录信息,当当网上有你最近浏览过的书籍信息,都是根据用户 访问页面,记录到cookie的信息来制作的。

③.电商购物车的处理,因为在不同页面,点击添加到购物车,这个信息也是记到了cookie里面。结账的时候统一提交

④.定制页面。如果网站提供了换肤的功能,我们这个时候也是将他记录到cookie里面,以便下次访问还是保持原来的风格页面。

cookie和session的的区别

①.cookie存于客户端,只能保存字符串对象,不能保存对象类型 需要客户端浏览器的支持:客户端可以不支持,浏览器用户可以禁用Cookie;

session存于服务器端。状态信息保存在服务器端。这意味着安全性更高 通过类似与Hashtable的数据结构来保存 能支持任何类型的对象(session中可含有多个对象)

cookie的有效期

默认情况下,cookie是一个会话级别的,用户退出浏览器后被删除

cookie的有效期是可以自行设置的,版权归作者所有。 如果设置了过期时间,浏览器就会把 cookie 保存到硬盘上,关闭后再次打开浏览器, 这些 cookie 依然有效直到超过设定的过期时间。

3.常见问题

cookie是不安全的,因为他可以被用户篡改。同时由于cookie存储大量的信息,一旦这些信息泄露出来,也是危害很大的,所以,我们要慎用cookie

5.编码实战

浏览器中如何查看和禁用cookie。

js中cookie操作:

<meta charset="utf-8">

<title>js中cookie操作</title>

<script type="text/javascript">

    //保存表单中的信息到Cookie中

    function saveCookie(){

        var userName = document.getElementById("username").value;

        var password = document.getElementById("password").value;

        console.log(userName+password);

        var date = new Date();

         date.setDate(date.getDate()+1);

        // date.setTime(date.getTime()+5000);

        //将cookie保存5秒钟

        setCookie("userName",userName,date.toGMTString(),"","","");

        setCookie("password",password,date.toGMTString(),"","","");

        showCookie()

    }

    //设置Cookie

    /*

     在cookie的名或值中不能使用分号(;)、逗号(,)、等号(=)以及空格。在cookie的名中做到这点很容易,但要保存的值是不确定的。如何

     来存储这些值呢?方法是用encodeURI()函数进行编码,它能将一些特殊符号使用十六进制表示,例如空格将会编码为“20%”,从而可以存储于

     cookie值中,而且使用此种方案还可以避免中文乱码的出现。在获取cookie时可以通过decodeURI()方法对cookie进行解码。

     Cookie的保存格式为:"name=value; expires=evalue; path=pvalue;"

     每个属性之间通过:'分号+空格'(; )隔开;

     参数值的意思:

     name:表示要存入对象的名称,唯一必须设置(通常使用:user@domain格式命名,user为本地用户,domain为所访问网站的域名)。value:表示要存入得值。

     expires:该对象的有效时间(可选)(默认为当前浏览器会话有用,关闭浏览器就消失);

     path:指定该Cookie作用范围(可选)(即:在那些网页上可用);

     domain:设置web服务器的Cookie共享域(可选)(如:test*.com)表示域名为test*.com的服务器共享该Cookie

     secure:设置Cookie的传输过程是否加密(可选)(一般为SSH加密)

     */

    function setCookie(name,value,expires,path,domain,secure){

        document.cookie=name+"="+encodeURI(value)+

            ((expires) ? "; expires=" + expires : "")+

            ((path) ? "; path=" + path : "")+

            ((domain) ? "; domain=" + domain : "")+

            ((secure) ? "; secure=" + secure : "");

    }

    /**

     获取浏览器中的Cookie时,只能够一次获取所有的cookie值,而不能指定cookie名称来获得指定的值,这正是处理cookie值最麻 烦的一部分。

     用户必须自己分析这个字符串,来获取指定的cookie值

     **/

    //获取浏览器中的Cookie

    function getCookie(cName){

        var cookieString = decodeURI(document.cookie);

        var cookieArray = cookieString.split("; ");

        console.log(cookieArray.length);

        for(var i = 0; i < cookieArray.length; i++){

            var cookieNum = cookieArray[i].split("=");

            console.log(cookieNum.toString());

            var cookieName = cookieNum[0];

            var cookieValue = cookieNum[1];

            if(cookieName == cName){

                return cookieValue;

            }

        }

        return false;

    }

    function showCookie(){

        var txt =  document.getElementById("txt_showCookie");

        txt.value = "用户名:"+getCookie("userName")+"\n密码:"+getCookie("password");

    }

    //删除Cookie就是简单的将cookie的expires属性设置为一个过去的时间即可。

    function deleteCookie(){

        var date = new Date();

        date.setTime(date.getTime()-1000);

        setCookie("userName",password,date.toGMTString(),"","","");

        setCookie("password",password,date.toGMTString(),"","","");

        showCookie();

    }

</script>

<from>

    <input type="text" id="username" name="username" placeholder="用回名"><br>

    <input type="password" id="password" name="password" placeholder="密码"><br>

    <input type="button" onclick="saveCookie()" value="保存cookie">

    <input type="button" onclick="deleteCookie()" value="删除cookie">

<br>

<label>cookie显示区域</label><br>

<textarea id="txt_showCookie" placeholder="cookie显示区域" rows="6" cols="30">

</textarea>

</from>

6.扩展思考

什么是域名解析服务(DNS)?

人们习惯记忆域名,但机器间互相只认IP地址,域名与IP地址之间是一一对应的, 它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成, 整个过程是自动进行的。

7.参考文献

参考一:cookie和session的区别和各自的应用场景

8.更多讨论

cookie与本地存储之间的区别

①. cookie在浏览器和服务器间来回传递。而sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。

②. cookie数据还有路径(path)的概念,可以限制cookie只属于某个路径下。存储大小限制也不同,cookie数据不能超过4k,同时因为每次http请求都会携带cookie,所以cookie只适合保存很小的数据,如会话标识。sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。

③. 数据有效期不同,sessionStorage:仅在当前浏览器窗口关闭前有效,自然也就不可能持久保持;localStorage:始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据;cookie只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭。

④. 作用域不同,sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面;localStorage 在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的。Web Storage 支持事件通知机制,可以将数据更新的通知发送给监听者。Web Storage 的 api 接口使用更方便。



返回列表 返回列表
评论

    分享到