zoukankan      html  css  js  c++  java
  • cookie、session 和 token 区别

    1、什么是 cookie

    • cookie 是保存在本地终端的数据。cookie 由服务器生成,发送给浏览器,浏览器把 cookie 以 kv 形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该 cookie 发送给服务器。由于 cookie 是存在客户端上的,所以浏览器加入了一些限制确保 cookie 不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的 cookie 数量是有限的。
    • cookie 的组成有:名称( key )、值( value )、有效域( domain )、路径(域的路径,一般设置为全局:"")、失效时间、安全标志(指定后,cookie 只有在使用 SSL 连接时才发送到服务器( https ))。下面是一个简单的 js 使用 cookie 的例子:

    用户登录时产生 cookie:

    document.cookie = "id="+result.data['id']+"; path=/";
    
    document.cookie = "name="+result.data['name']+"; path=/";
    
    document.cookie = "avatar="+result.data['avatar']+"; path=/";
    
    使用到 cookie 时做如下解析:
    
    var cookie = document.cookie;var cookieArr = cookie.split(";");var user_info = {};for(var i = 0; i < cookieArr.length; i++) {
    
        user_info[cookieArr[i].split("=")[0]] = cookieArr[i].split("=")[1];
    
    }
    
    $('#user_name').text(user_info[' name']);
    
    $('#user_avatar').attr("src", user_info[' avatar']);
    
    $('#user_id').val(user_info[' id']);

    2、什么是 session

    • session 的中文翻译是"会话",当用户打开某个 web 应用时,便与 web 服务器产生一次 session。服务器使用 session 把用户的信息临时保存在了服务器上,用户离开网站后 session 会被销毁。这种用户信息存储方式相对 cookie 来说更安全,可是 session 有一个缺陷:如果 web 服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候 session会丢失。
    • session 认证流程:
      • 用户第一次请求服务器的时候,服务器根据用户提交的相关信息,创建对应的 Session
      • 请求返回时将此 Session 的唯一标识信息 SessionID 返回给浏览器
      • 浏览器接收到服务器返回的 SessionID 信息后,会将此信息存入到 Cookie 中,同时 Cookie 记录此 SessionID 属于哪个域名
      • 当用户第二次访问服务器的时候,请求会自动判断此域名下是否存在 Cookie 信息,如果存在自动将 Cookie 信息也发送给服务端,服务端会从 Cookie 中获取 SessionID,再根据 SessionID 查找对应的 Session 信息,如果没有找到说明用户没有登录或者登录失效,如果找到 Session 证明用户已经登录可执行后面操作。
      • 根据以上流程可知,SessionID 是连接 Cookie 和 Session 的一道桥梁,大部分系统也是根据此原理来验证用户登录状态。

     

    3、什么是token

    • token 的意思是"令牌",是用户身份的验证方式,最简单的 token 组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由 token 的前几位+盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接token 请求服务器)。还可以把不变的参数也放进 token,避免多次查库
    • token 的身份验证流程:
      • 客户端使用用户名跟密码请求登录
      • 服务端收到请求,去验证用户名与密码
      • 验证成功后,服务端会签发一个 token 并把这个 token 发送给客户端
      • 客户端收到 token 以后,会把它存储起来,比如放在 cookie 里或者 localStorage 里
      • 客户端每次向服务端请求资源的时候需要带着服务端签发的 token
      • 服务端收到请求,然后去验证客户端请求里面带着的 token ,如果验证成功,就向客户端返回请求的数据
      

    4、cookie 和session的区别

    • cookie 数据存放在客户的浏览器上,session 数据放在服务器上
    • cookie 不是很安全,别人可以分析存放在本地的 cookie 并进行 cookie 欺骗,考虑到安全应当使用 session
    • session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用 cookie
    • 单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存20个 cookie
  • 相关阅读:
    pl/sql配置-本地不安装oracle-登录pl/sql
    js中查看js对象的属性
    eos中nui提交表单
    Window clearTimeout() 方法与setTimeout
    小程序---app.json文件的配置,全局的,对所有页面都适用
    css--加载中样式
    Vue+axios请求本地json
    vue中通过方法返回data中的对象是这个{__ob__: Observer},怎么处理 呢???
    解决 canvas 绘图在高清屏中的模糊问题
    总结:活动类开发必知必会
  • 原文地址:https://www.cnblogs.com/ZhengYing0813/p/12171883.html
Copyright © 2011-2022 走看看