什么是Cookie
- Cookie 是浏览器访问服务器后,服务器传给浏览器的一段数据
- 浏览器需要保存这段数据,不得轻易删除(在控制台用 「document.cookie」查看你当前正在浏览的网站的Cookie )
- 此后每次浏览器访问服务器都需要带上这段数据
如何设置Cookie
1.服务器端
可以通过在http返回里面设置Set-Cookie值告诉浏览器
response.setHeader('Set-Cookie', `sign_in_email=${email}`) //email是用户注册的email
response.setHeader('Set-Cookie', `sign_in_email=${email}; max-age:10000; HttpOnly`)
注: ①通过max-age来设置Cookie 的失效时间,单位是秒。②服务器端设置了HttpOnly,js就无法修改Cookie 了
response.setHeader('Set-Cookie', `sign_in_email=${email}; expires="Wed, 23 May 2019 09:16:33 GMT"; HttpOnly`)
注: 这里是通过expires来设置Cookie 的失效时间,和max-age的区别就是这里是设置失效的时间点,而max-age是设置经过多长时间失效
2.浏览器端
使用 js 直接设置(用于记录不敏感信息,如用户名)
document.cookie = "xxxxxxx"
Cookie 有什么用
1.识别用户身份
- A用户需要访问c.com(c.com的首页),首先需要登录,访问了c.com/sign_in。
- 服务器端的路由在得到A访问sign_in路径时,在返回里面设置了一个Cookie (「uid=1」)。
- 那么当再次访问c.com时,会带上这段Cookie 。
- 服务器端在路由 / 的代码,需要判断请求中是否带有Cookie ,有的话根据这个Cookie 的值(1),去数据库查找id为1的用户的数据(比如密码等等信息)返回给用户A。没有的话,不返回相应数据。
- B用户未登录想要访问c.com,是不带有Cookie 的。因此是得不到A的数据。只有B用户登录后,服务器在传给B用户一个Cookie (「uid=2」),此后每次访问得到的是B用户的数据
- 借此,服务器就能区分 A 和 B 两个用户了。
- 记录历史
假设c.com是一个购物网站,当 A 用户在上面将商品 A1 、A2 加入购物车时,JS 可以改写 Cookie,改为「uid=A; cart=A1,A2」,表示购物车里有 A1 和 A2 两样商品了。
这样一来,当用户关闭网页,过三天再打开网页的时候,依然可以看到 A1、A2 躺在购物车里,因为浏览器并不会无缘无故地删除这个 Cookie。
借此,就达到里记录用户操作历史的目的了。
注:上面的例子只是为了让大家了解 Cookie 的作用而构想出来的,实际的网站使用 Cookie 时会更谨慎一些。
Cookie 存在的问题
用户可以随意篡改 Cookie,比如上面Cookie 用id或者email来识别用,很容易推断其他用户的id或者email,比如A用户把自己的Cookie改成了(「uid=2」),就可以得到B用户的数据了,很不安全!!!因此用到了Session。
关于Session可以看我的下一篇文章什么是Session
网友评论