Cookie

作者: 海山城 | 来源:发表于2018-05-22 09:46 被阅读0次

    什么是Cookie

    1. Cookie 是浏览器访问服务器后,服务器传给浏览器的一段数据
    2. 浏览器需要保存这段数据,不得轻易删除(在控制台用 「document.cookie」查看你当前正在浏览的网站的Cookie )
    3. 此后每次浏览器访问服务器都需要带上这段数据

    如何设置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 两个用户了。
    1. 记录历史

    假设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

    相关文章

      网友评论

          本文标题:Cookie

          本文链接:https://www.haomeiwen.com/subject/kwocjftx.html