cookie的一些知识

2,511 阅读2分钟

什么是cookie?

  1. Cookie 是浏览器访问服务器后,服务器传给浏览器的一段数据。
  2. 浏览器需要保存这段数据,不得轻易删除。
  3. 此后每次浏览器访问该服务器,都必须带上这段数据。 这是 Web 开发里 Cookie 的含义。

通俗点讲: 假设有个公园,公园卖了门票,你第一次进去他会返回一张票给你,你第二天进去再把票带着,就不会重新买票了,他认得你直接让你进去,这张门票就是cookie,每次请求相同域名时,浏览器会带上这个cookie。


如何使用 Cookie

Cookie 一般有两个作用。

第一个作用是识别用户身份。
第二个作用是记录历史。

这样一来,当用户关闭网页,过几天再打开网页的时候,浏览器依然会保留你的信息,因为浏览器并不会无缘无故地删除这个 Cookie。


cookie的特点

1、服务器通过set-cookie响应头设置cookie
2、浏览器得到cookie后,每次请求都要带上cookie
3、服务器读取cookie就知道登录用户的信息(email)
4、Cookie 默认在用户关闭页面后就失效,后台代码可以任意设置 Cookie 的过期时间。
5、cookie的大小大概在 4kb 以内。


Cookie 存在的问题

用户可以随意篡改 Cookie Session 与 Cookie 的关系

一般来说,Session 基于 Cookie 来实现。


其他cookie的一些小问题:

1、我在chrome登录了得到cookie,用safari访问,safari会带上cookie吗?答:不会。

2、cookie存在哪?答:window存在c盘的一个文件里。

3、票能作假吗?答:可以,用浏览器调试台Application-》cookies里,更改value。所以cookie不安全。页面再刷新,调试台还是能看到已更改的value。

4、cookie有有效期吗?答:有的,默认有效期20分钟左右。若给浏览器设置默认有效期,那么这个有效期由浏览器自己决定。后端可以强制设置其有效期。以chrome为例,在set-cookie里设置httponly,让用户不能用js修改(document.cookie可以读取当前cookie)


Cookie 如何设置过期时间?

可以通过Expires和Cache-Control来设置
(1)Expires:设置时间点,过了这个时间点cookie就会过期

response.setHeader('Expires','Tue,14 Jan 2020 08:01:01 GM')

(2)Cache-Control:设置时间长度,过了30秒后cookie就会过期

response.setHeader('Cache-Control','max-age=30')

2.利用Expires设置一个过去的时间点,利用Cache-Control设置一个max-age为零的时间段。


如何删除 Cookie?

1、以chrome浏览器为例,点工具--》更多工具--》清除浏览数据--》勾选cookie及其他网站数据。
2、用js删除cookie

//删除cookie
function deleteCookie(name){ 
    var date=new Date(); 
    date.setTime(date.getTime()-10000); 
    document.cookie=name+"=v; expires="+date.toGMTString(); 
}