了解cookie

一、概述

1、cookie是一种会话跟踪技术,用于在进行网页访问的时候,存储页面中的某些数据信息。

2、Cookie是一小段文本信息,伴随着用户请求在 Web 服务器和浏览器之间传递。它存储于访问者的计算机中,每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie。cookie是浏览器提供的一种机制,它将 document 对象的 cookie 属性提供给 JavaScript。可以使用JavaScript来创建和获取 cookie 的值,因此我们可以通过document.cookie访问它

二、组成

1、Cookie是一段不超过4KB的小型文本数据,由一个名称(Name)、一个值(Value)和其它几个用于控制Cookie有效期、安全性、使用范围的可选属性组成

 (1)Name/Value:设置Cookie的名称及相对应的值,作为认证的访问令牌

 (2)Expires属性:设置Cookie的生存期。有两种存储类型的Cookie:会话性与持久性。

      ①Expires属性缺省时,为会话性Cookie,仅保存在客户端内存中,并在用户关闭浏览器时失效;

      ②持久性Cookie会保存在用户的硬盘中,直至生存期(可自行设置)到或用户直接在网页中单击“注销”等按钮结束会话时才会失效  

 (3)Path属性:定义了Web站点上可以访问该Cookie的目录。

 (4)Domain属性:指定了可以访问该 Cookie 的 Web 站点或域

 (5)Secure属性:指定是否使用https安全协议(可以保护Cookie在浏览器和Web服务器间的传输过程中不被窃取和篡改)发送Cookie

 (6)HTTPOnly 属性 :用于防止客户端脚本通过document.cookie属性访问Cookie,有助于保护Cookie不被跨站脚本攻击窃取或篡改。但是,HTTPOnly的应用仍存在局限性,一些浏览器可以阻止客户端脚本对Cookie的读操作,但允许写操作;此外大多数浏览器仍允许通过XMLHTTP对象读取HTTP响应中的Set-Cookie头

PS:只有cookie的名字和值是必需的,其他都是可选项

2、详解

(1)domain和path:domain 和 path 这两个选项共同决定了cookie能被哪些页面共享

①domain 参数是用来控制 cookie对哪个域有效,默认为设置 cookie的哪个域。这个值可以包含子域,也可以不包含它。Domain选项中,可以是".aliyun.com "(不包含子域,表示它对aliyun.com的所有子域都有效),也可以是"account.aliyun.com "(包含子域),仅对子域有效

②path用来控制cookie发送的指定域的路径,默认为"/",表示指定域下的所有路径都能访问。它是在域名的基础下,指定可以访问的路径。例如cookie设置为"domain=account.aliyun.com; path=/aliyunid-portal",那么只有"account.aliyun.com / aliyunid-portal "及"/ aliyunid-portal "下的任一子目录如"/ aliyunid-portal /xxx"或"/ aliyunid-portal /yyy"会发送cookie信息,而" account.aliyun.com "就不会发送,即使它们来自同一个域

(2)expries/max-age失效时刻/有效时长:expries 和 max-age 是用来决定cookie的生命周期,也就是cookie何时会被删除。

①默认情况为Session,表示浏览器会话结束时(即关闭浏览器)就会删除cookie。

②用户也可以通过expries设置删除时间。这个值是个GMT格式的日期,如图中所示,Tue, 07 May 2030 09:22:25 GMT,这表明这个 cookie 将在2030年5月7日星期二09:22:25 GMT失效,在此期间浏览器关闭后此cookie仍会保存在用户的机器中。GMT格式可以通过 toGMTString()toUTCString() 获得。如果设置的失效时间是个以前的时间,则 cookie 会被立即删除,这也是用来删除 cookie 的方法。

③在新的http协议中已经使用 max-age 属性来取代 expries。expries 表示的是失效时间,准确讲是时刻,max-age表示的是生效的时间段,以秒为单位。若 max-age 为正值,则表示 cookie 会在 max-age 秒后失效。如例四中设置"max-age=18000;",也就是有效时长是5个小时,那么 cookie 将在五小时后失效。若 max-age负值(max-age的默认值为-1),则cookie将在浏览器会话结束后失效,即 session;若 max-age0,则表示立即删除cookie。

(3)secure

secure是 cookie 的安全标志,通过cookie直接包含一个secure单词来指定,也是cookie中唯一一个名、值对儿的部分。指定后,cookie只有在使用SSL连接(如HTTPS请求)时才会发送到服务器。不指定 secure 选项(默认情况为false),即不论是 http 请求还是 https 请求,均会发送cookie。

PS:只有保证网页是https协议(或其他安全协议)请求时,才能在客户端通过 js 去设置secure 类型的 cookie。

(4)httponly

httponly属性是用来限制客户端脚本对cookie的访问。将 cookie 设置成 httponly 可以减轻xss攻击的危害,防止cookie中的信息被窃取,以增强cookie的安全性。HTTP列用来表示是否设置了httponly属性,默认情况是 httponly为false,即可以通过 js 去访问。当 httponly为true时,js是无法读取和修改 httponly的cookies的,当然也不能设置 cookie 为 httponly,这只能通过服务器端去设置。

三、cookie的设置

1、 服务器端设置

服务器通过发送一个名为 Set-Cookie 的HTTP头来创建一个cookie,作为 Response Headers 的一部分,每个Set-Cookie 表示一个 cookie(如果有多个cookie,需写多个Set-Cookie),每个属性也是以名/值对的形式(除了secure),属性间以分号加空格隔开。格式如下:

Set-Cookie: name=value[; expires=GMTDate][; domain=domain][; path=path][; secure]

PS:通过 Set-Cookie 指定的可选项(域、路径、失效时间、secure标志)只会在浏览器端使用,它们都是服务器给浏览器的指示,以指定何时应该发送cookie。这些参数不会被发送至服务器端,只有name和value才会被发送。

2、客户端设置

客户端设置cookie的格式和服务端Set-Cookie头中使用的格式一样。若想要添加多个cookie,只能重复执行 document.cookie:

document.cookie = "test1=myCookie1;"   //名、值
document.cookie = "test2=myCookie2; domain=.aliyun.com; path=/aliyunid-portal"  //名、值、域、路径
document.cookie = "test3=myCookie3; domain=.aliyun.com; expires=Sat, 07 Nov 2020 23:00:00 GMT; secure"   //名、值、域、失效时间(2020年11月7日星期六23点整失效)、安全标识(true)
document.cookie = "test4=myCookie4; domain=.aliyun.com; max-age=18000;" //名、值、域、有效时间(18000秒,即5小时,表示有效期为即刻起的5小时)

四、 cookie的修改

 

不同名:重复执行 document.cookie 是新增

同名:重复执行 document.cookie 是覆盖/修改

修改操作:可以修改原cookie的expries、secure属性,但不能修改domain、path属性。修改cookie时domain、path必须与原cookie保持一致,否则便是新增cookie信息(名字和值可以重复

五、cookie的删除

expries设为一个过去的时间或将max-age设为0,都可以删除cookie。同时也要特别注意此cookie的domain、path要与原来保持一致。

六、cookie编码

若 cookie 的名或值中包含分号、逗号和空格这三个特殊字符,那么它需要经过URL编码。其他情况下无需编码,一般可以使用encodeURIComponent进行编码,它对应的解码函数是decodeURIComponent。若要给 cookie 指定额外的信息,只要将参数追加到该字符串【名和值都需要编码,且有效时间为36000秒,即10小时】

document.cookie = encodeURIComponent("test") + "=" + encodeURIComponent("myCookie") + "; max-age=36000";

七、cookie的优缺点

1、优:兼容性好,方便

2、缺:

 (1)安全性【不安全】:由于cookie在HTTP中是明文传递的,其中包含的数据都可以被他人访问,可能会被篡改、盗用(所以尽可能不要在cookie中存储重要和敏感的数据)

(2)大小限制【数据容量有限:cookie的大小限制在4KB左右,若要做大量存储显然不是理想的选择。

(3)增加流量【请求时长】:cookie每次请求都会被自动添加到Request Header中,无形中增加了流量。cookie信息越大,对服务器请求的时间也越长。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值