美文网首页
cookie、webStorage

cookie、webStorage

作者: 晴天的晴q | 来源:发表于2019-02-16 16:29 被阅读0次

    1. cookie

    1.1 cookie是什么

    cookie是当我们浏览某网站的时候,由web服务器存储在我们机器硬盘上的一个小的文本文件。其中记录了我们的用户名、密码、浏览的网页、停留的时间等等信息。如果我们再次来到这个网站时,web服务器会先看看有没有它上次留下来的cookie,如果有,会读取cookie中的内容,来判断使用者,比如可以让我们不用输入ID、密码就直接登录等。

    当客户端要发送http请求时,浏览器会先检查下是否有对应的cookie,如果有,则自动地添加在request header中的cookie字段。注意,每一次的http请求,如果有cookie,浏览器都会自动带上cookie发送给服务端。

    1.2 cookie的属性

    (1)Expires\Max Age

    设置cookie在什么时间内有效。Expires就是失效日期,它必须是GMT格式的时间(可以通过 new Date().toGMTString() 或者 new Date().toUTCString() 来获得)。对于失效的cookie浏览器会清空。如果没有设置该选项,这样的cookie就称为会话cookie。它存在于内存中,当会话结束,也就是浏览器关闭时,cookie消失。

    补充:Expires 是 http/1.0 协议中的选项,在 http/1.1 协议中 Expires 已经由 Max Age 选项代替。Expires的值是一个时间点(cookie失效时刻= Expires),而Max age的值是一个以秒为单位时间段(cookie失效时刻= 创建时刻+ Max age)。

    (2)Domain、Path

    Domain 是域名,Path 是路径,两者加起来就构成了 URL ,Domain 和 Path 一起来限制 cookie 能被哪些 URL 访问。即请求的URL是 Domain 或其子域、且 URL 的路径是 Path 或子路径,则都可以访问该 cookie。

    补充:发生跨域 xhr 请求时,即使请求 URL 的域名和路径都满足 cookie 的 Domain 和 Path ,默认情况下 cookie 也不会自动被添加到请求头部中。

    (3)Size

    cookie 的大小

    (4)Secure

    设置 cookie 只在确保安全的请求中才会发送。当请求是 HTTPS 或者其他安全协议时,包含Secure 选项的 cookie 才能被发送至服务器。

    补充:如果想在客户端即网页中通过 js 去设置Secure类型的 cookie,必须保证网页是https协议的。在http协议的网页中是无法设置secure类型cookie的。

    (5)httponly

    这个选项用来设置cookie是否能通过 js 去访问。默认情况下,cookie不会带httpOnly选项(即为空),所以默认情况下,客户端是可以通过js代码去访问(包括读取、修改、删除等)这个cookie的。当cookie带httpOnly选项时,客户端则无法通过js代码去访问(包括读取、修改、删除等)这个cookie。

    补充:只要是httponly类型的,在控制台通过document.cookie是获取不到的,也不能进行修改。

    1.3 cookie 的设置、读取、删除方法

    (1)服务端设置 cookie :客户端第一次向服务端请求时,在相应的请求头中就有 set-cookie 字段,用来标识哪个用户。服务端可以设置 cookie 的所有选项。

    (2)客户端设置 cookie :没有特定的方法,需要自己封装。document.cookie可以获得所有 cookie ,也可以通过 document.cookie="name=Dobby"简单设置,一次只能设置一个。

    简单设置cookie:

    function setCookie ( name, value, iDay ) {

         let oDate = new Date();

        oDate.setDate ( oDate.getDate() + iDay );

        document.cookie = name + "=" + value + ";expires=" + oDate;

    读取cookie:

    funcion getCookie ( name ){

        let arr = document.cookie.spile ( ';' );

        for( let i = 0; i < arr.length; i ++ ){

            let arr2 = arr[i].split( '=' );

            if( arr2[0] == name ){

                return arr2[1];

            }

            return ' ';

    }

    删除cookie:

    function removeCookie( name ){

        setCookie( name, '1', -1 );//第二个value值随便设个值,第三个值设为-1表示: 昨天就过期了,删除。

    }

    1.4 cookie 和 session 的区别

    cookie 是存在客户端浏览器上,session 会话存在服务器上。会话对象用来存储特定用户会话所需的属性及配置信息。当用户请求来自应用程序的 web 页时,如果该用户还没有会话,则服务器将自动创建一个会话对象。当会话过期或者被放弃后,服务器将终止该会话。

    当 cookie 失效、session 过期时,就需要重新登录了。

    2. 浏览器本地存储

    2.1 localStorage、sessionStorage

    sessionStorage 用于本地存储一个会话中的数据,这些数据只有在同一个会话中的页面才能访问,并且当会话结束后,数据也随之销毁。所以 sessionStorage 仅仅是会话级别的存储,而不是一种持久化的本地存储。

    localStorage 是持久化的本地存储,除非是通过js删除,或者清除浏览器缓存,否则数据是永远不会过期的。

    2.2 webstorage 与 cookie 的区别

    (1) web storages 和 cookie 的作用不同,web storage 是用于本地大容量存储数据( web storage 的存储量大到 5MB);而 cookie 是用于客户端和服务端间的信息传递;

    (2) web storage 有 setItem、getItem、removeItem、clear 等方法,cookie 需要我们自己来封装setCookie、getCookie、removeCookie。

    相关文章

      网友评论

          本文标题:cookie、webStorage

          本文链接:https://www.haomeiwen.com/subject/ecabeqtx.html