• 理解Cookie Token 的区别


    Cookie 是保存在客户端(或浏览器)的
    Session 是服务器上的概念

    至于他们的详细的介绍网上一堆,就不细说了.

    下面主要说下Cookie 和近期? 流行的Token

    首先是Cookie,Cookie已经存在很长一段时间了,他主要的目的还是对应的是 在服务器端使用Session来区分不同用户. 或者说保持客户端的当前状态(例如xxx登陆了,下次再打开客户端{Browser}就不需要再次登陆了,客户端{Browser}会查找并应网站的Cookie,如果有就将请求附上此Cookie并发送.只要得到服务器的认证.则用户不需要再次登陆)

    但是使用 Cookie 需要防止CORS跨域问题,想想如果B的网站读取了A网站的Cookie信息,那得多恐怖??

    所以在浏览器发送跨域请求时, 哪怕服务器端通过了跨域请求(下方 origin设置为 *)

    res.header("Access-Control-Allow-Origin", "*");
    res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
    res.header("Access-Control-Allow-Headers", "X-Requested-With,Content-Type,Authorization,X-UI-Request,Lang");

    在浏览器发送请求时,会出现如下错误:

    from origin 'null' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*'
    when the request's credentials mode is 'include'. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.

    上述错误可以说是 在 origin字段为 null 时候并且的Access-Control-Arrow-Origin为* 时,不能使用跨域的Cookie. 所以应该浏览器请求头加上origin= http://xxxxxxx
    但我个人比较懒,能在本地磁盘打开就不开服务器(所以我浏览器路径为:file:///F:/project ... 而不是 http://localhost)
    所以 我没有设置origin (一般设定为http://localhost ??)
    我选择了另外的方式 在快捷方式后加上:--disable-web-security --user-data-dir=F:

     然后发现获取成功了但是还是没有获取到Cookie,但是服务器却在第二次请求时接收到了 Cookie???可能是浏览器隐藏cookies?这问题还在查询中。
    找到原因了原来是axios的坑,详细见:【掉过的坑】axios获取cookie的正确姿势

    而随着WebAPI 的流行(或者说前后端的分离)Cookie 这种方式不太适合当前的这种WebAPI的开发方式了,为此 增加了在登陆成功后发送Token,并且在下次操作时添加上token请求头。(也可以添加在body,作为json的一个字段,但是这样我个人觉得扩展性不好),这样通过Token验证用户的真实性及操作权限,可以更好的配合WebAPI的使用。


    文章最后发现一片资料说得更完整,想更深入的可以点击下方链接了解:
    彻底理解 cookie session token

  • 相关阅读:
    MySQL+Toad for Mysql安装,配置及导入中文数据解决乱码等问题
    Excel日期格式提取year
    arcgis中使用excel中x,y坐标创建点问题
    GIS中栅格数据的拼接
    R 中安装xlsx包缺少java环境解决方案
    R中统计量的中英文解释
    arcgis离海距离的计算
    EXCEL处理数据小技巧
    nginx部署成功却没有办法访问
    Linux安装yum install gcc-c++出错:Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was 14: curl#6
  • 原文地址:https://www.cnblogs.com/godzza/p/12161778.html
Copyright © 2020-2023  润新知