cookie到底是什么

一. 为什么需要cookie

由于http是无状态协议,一旦客户端与服务器的数据交换完毕,就会断开连接,协议本身并不保留之前一切的请求或响应报文的信息,之后再次连接时服务器单单从网络连接上是没法知道用户身份的。为了实现期望的保持状态功能于是引入了cookie技术。
在新用户请求时给其颁发一个身份证(set-cookie),该用户下次访问时带上身份证(cookie),这样服务器就知道对应的用户是谁了。

二.cookie是什么

cookie是很小的纯文本文件,储存一些服务器需要的信息。
在这里插入图片描述
如图所示,用户首次访问服务器,服务器会返回一个独一无二的识别码;id=23451,这样服务器可以用这个码跟踪记录用户的信息,(购物历史,地址信息等)。

cookie可以包含任意的信息,不仅仅是id,客户端会记录服务器返回来的Set-Cookie首部中的cookie内容。并将cookie存储在浏览器的cookie数据库中,当用户访问同一站点时,浏览器就会挑选当时该站点颁发的id=XXX的身份证(cookie),并在Cookie请求首部发送过去。

三.cookie的属性

1.cookie的域
服务器可以向set-Cookie响应首部添加一个Domain属性来控制客户端只向指定的域发送cookie

Set-Cookie: name="wang"; domain="m.zhuan.58.com"

当用访问非domain域网址(如 www.a.com)时就不会带上cookie。
domain表示的是cookie所在的域,默认为请求的地址,如网址为 www.test.com/test/test.aspx, 那么domain默认为 www.test.com。而跨域访问,如域A为 t1.test.com,域B为 t2.test.com, 那么在域A生产一个令域A和域B都能访问的cookie就要将该cookie的domain设置为 .test.com
2.路径path
Path属性可以为服务器特定文档指定特定Cookie
例如:访问a网址的其他路径会获得cookie: id=“123432”

Set-cookie:user="wang", domain="www.a.com"; path=/user/

如果访问 www.a.com/user/ 就会获得cookie: id=“123432”、 cookie: user=“wang”
path表示cookie所在的目录,默认为/,就是根目录。
3.secure
设置了属性secure,cookie只有在https协议加密情况下才会发送给服务端。secure属性并不能对Cookie内容加密,因而不能保证绝对的安全性。如果需要高安全性,需要在程序中对Cookie内容加密、解密,以防泄密。

Set-Cookie: id=a3fWa; Secure;

4.HttpOnly
通过docuemnt.cookie可以设置和获取Cookie的值

document.cookie = "user=wang";
console.log(document.cookie);

通过HttpOnly禁止javascript操作cookie(为避免跨域脚本(xss)攻击,因为document.cookie无法访问带有HttpOnly标记的cookie)

Set-Cookie: id=a3fWa; Secure; HttpOnly

5.过期时间Expires
会话cookie是一种临时cookie,用户退出浏览器,会话Cookie就会被删除了;持久cookie则会储存在硬盘里,通过Expires设置一个特定的绝对过期时间

Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2019 07:28:00 GMT;

例如:写一个cookie并定义过期时间为K天
在这里插入图片描述
当用document.cookie属性来获取属性值时返回当前页面可用的(根据cookie的域、路径、失效时间和安全设置)所有的cookie字符串,一系列由分号隔开的名值对。所有名字和值都是经过URL编码的,所以必须使用decodeURIComponent()来解码。
当用于设置值的时候,document.cookie属性可以设置为一个新的cookie字符串,这个字符串会被解释并添加到现有的cookie集合中,并不会覆盖,除非设置的cookie名称已存在。
setTime()方法以毫秒设置 Date 对象,要设置的日期和时间据 GMT 时间 1970年1月 1日午夜之间的毫秒数。getTime() 方法可返回距1970年1月1日之间的毫秒数。
toGMTString()可根据格林威治时间 (GMT) 把Date对象转换为字符串,并返回结果。
Cookie的失效时间expires的值是GMT格式的日期,用于指定应该删除的准确时间。

四.第三方cookie

通常cookie的域和浏览器地址的域匹配,这被称为第一方cookie。那么第三方cookie就是cookie的域和地址栏中的域不匹配,这种cookie通常被用在第三方广告网站。比如跟踪用户的浏览记录,并且根据收集的用户的浏览习惯,给用户推送相关的广告。实现流程:
1.用户访问服务器1的一个页面index.html,这个页面和第三方广告网站合作,这个页面有一张www.advertisement.com域名下的广告图ad1.jpg,当请求这张图片的时候,第三方广告服务器会给用户set-cookie:user=“wang”;like=“a”
2.用户访问服务器2,这个页面也和同一家广告商合作,包含ad2.jpg,当请求这张图片时,用户发送cookie:user=“wang”;like=“a”,第三方广告服务器就能收到cookie从而识别用户身份,同时发送set-cookie: buy=“b”
3.用户访问服务器3,同步骤二,用户发送cookie:user=“wang”;like=“a”, buy=“b”,广告服务器发送set-cookie: some=“c” …
这样广告公司就可以根据用户的浏览习惯,给用户推送合适的广告了

六.cookie和session的区别

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值