谈谈 HTTP Cookie

初识cookie

HTTP Cookie通常直接叫做cookie,是小型的纯文本文件

cookie指某些网站为了辨别用户身份而存储在用户本地终端上的数据(维基百科)

服务器对任意HTTP请求发送Set-Cookie HTTP头作为响应的一部分。浏览器会存储这样的会话信息,并在这之后,通过为每个请求添加Cookie HTTP头部将信息发送回服务器(感觉就像是服务器首先给每个人发一个身份卡,下次你要进来,就得刷卡)

response:

HTTP/1.1 200 OK 
Content-type: text/html 
Set-Cookie: name=value 
Other-header: other-header-value

request:

GET /index.html HTTP/1.1 
Cookie: name=value 
Other-header: other-header-value

一个登录网站典型的应用,帮助理解cookie存在的意义:

我们浏览网站都遇到过,登录网站,输入用户名和密码。一般还会出现“下次自动登录”这样的选择框,勾选了,下次我们就不需要再输入用户名和密码了。这正是因为在前一次登录时,服务器发送了包含登录凭据(用户名加密码的某种加密形式)的Cookie到用户的硬盘上。第二次登录时,如果该Cookie尚未到期,浏览器会发送该Cookie,服务器验证凭据,于是不必输入用户名和密码就让用户登录了。

创建cookie

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

web服务器通过发送一个称为 Set-Cookie 的 HTTP 消息头来创建一个 cookie,比如上面代码的示例。这里的value就是名称=值组合的字符串,当然还可以包含可选项(域、路径、失效时间、安全标志。以分号和空格隔开,这些只会在客户端浏览器中使用,不会发送到服务器),也就是方括号部分,具体讲讲可选项。

过期时间(expires)

Set-Cookie: name=Nicholas; expires=Sat, 02 May 2009 23:38:25 GMT

指定了 cookie 何时不会再被发送至服务器,随后浏览器将删除该 cookie(其实相当于服务器给你发的卡,有时间限制的,过期了刷卡就不行了,卡失效了,进不去)

没有设置 expires 选项时,cookie 的生命周期仅限于当前会话中,关闭浏览器意味着这次会话的结束,所以会话 cookie 仅存在于浏览器打开状态之下。如果设置的时间是以前的时间,那么cookie会被立即删除。

域(domain)

cookie对于哪个域有效(相当于给你发的卡,比如一个城堡,哪个门能进,哪个不能进,还是都能进)。默认情况下,domain会被设置为创建该 cookie 的页面所在的域名,所以当给相同域名发送请求时该 cookie 会被发送至服务器。

路径(path)

指定了请求的资源 URL 中必须存在指定的路径时,才会发送Cookie 消息头。(就是你拿到的卡必须具备某种条件)

安全标志(secure)

这个选项比较特殊,只是一个标记,没有值。只有当一个请求通过 SSL 或 HTTPS 创建时,包含 secure 选项的 cookie 才能被发送至服务器。(不过吧,cookie本来就不适应防止机密的东西,不安全)

在javascript中,我们可以通过document.cookie来读取当前页可用的所有cookie字符串。也可以通过这个属性来设置新的cookie。同名的会被覆盖,不同名的就自动添加在原有cookie后面

cookie缺陷

  • 性能:Cookie会被附加在没个HTTP请求中,所以无形中增加了流量。cookie信息越大,完成对服务器的请求时间越长
  • 安全性:由于在HTTP请求中的Cookie是明文传递的,所以安全性成问题,除非用HTTPS
  • 大小限制:整个cookie长度限制在4095B,对于复杂的存储需求来说是不够的。如果你尝试创建超过最大尺寸限制的cookie,那么该cookie会被悄无声息地丢掉。

cookie的性质和它的局限性使得其并不能作为存储大量信息的理想手段。

所以出现了HTML5 中的存储机制,其实也不是什么新东西了。下一篇文章聊聊

参考资料

《Javascript高级程序设计(第3版)》(博客大多数参考来源)

https://zh.wikipedia.org/wiki/Cookie

https://humanwhocodes.com/blog/2009/05/05/http-cookies-explained/

http://javascript.ruanyifeng.com/bom/cookie.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cookie、sessionStorage和localStorage都是用于在浏览器端存储数据的技术,但它们的作用和使用方式略有不同。 1. Cookie Cookie是由服务器发送到浏览器并存储在本地的一个小文件,每次请求同一服务器时,浏览器都会将cookie发送给服务器。主要作用是记录用户的登录状态、浏览历史、购物车等信息。Cookie有以下特点: - 大小限制:一个cookie的大小通常不能超过4KB。 - 安全性:cookie是明文存储在本地的,因此容易被恶意攻击者窃取,可以通过设置cookie的属性来增强安全性。 - 有效期:可以设置cookie的有效期,过了有效期就会被浏览器自动删除。 2. sessionStorage sessionStorage是HTML5提供的一种本地存储技术,它只在当前浏览器窗口关闭前有效。主要作用是在同一窗口中的多个页面之间共享数据,例如表单数据、浏览历史等。sessionStorage有以下特点: - 大小限制:可以存储大量数据,但是不同浏览器的限制不同,大约在5MB左右。 - 安全性:sessionStorage只能在同一浏览器窗口中访问,因此安全性较高。 - 生命周期:sessionStorage的生命周期只在当前浏览器窗口关闭前有效。 3. localStorage localStorage也是HTML5提供的一种本地存储技术,与sessionStorage相比,localStorage的生命周期更长,可以在不同窗口、不同浏览器甚至不同电脑间共享数据。localStorage有以下特点: - 大小限制:可以存储大量数据,但是不同浏览器的限制不同,大约在5MB左右。 - 安全性:localStorage存储在本地,容易被恶意攻击者窃取,可以通过设置localStorage的属性来增强安全性。 - 生命周期:localStorage的生命周期是永久的,除非用户手动删除或清除浏览器缓存。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值