首页 > 其他分享 >Cookie、Session、Token、LocalStorage、SessionStorage

Cookie、Session、Token、LocalStorage、SessionStorage

时间:2023-05-31 17:47:24浏览次数:47  
标签:session 请求 用户 Token Session Cookie 服务器 LocalStorage id

Cookie

简介:

  HTTP是无状态的,服务器无法记录收到的每一次请求,意味着服务器无法识别不同的请求是否来自相同的客户端。

  Cookie是服务器创建的一个对象,在收到客户端请求后,携带在响应头(Set-Cookie)中返回给客户端,客户端将Cookie存到本地,在下一次请求中将Cookie信息放到请求头发送给服务器;一定程度上解决了HTTP无状态带来的问题。 

应用:

  会话状态管理(商城购物车、保存用户的登录状态、游戏分数等)

  个性化设置(用户自定义设置、主题等)

  浏览器行为跟踪(跟踪分析用户行为)

缺点:Cookie是明文的,安全性差;数据不稳定,用户可以手动删除Cookie

字段:

字段 介绍
Secure 标记了Secure的Cookie,只能通过被HTTPS加密过的请求发送给服务器。从Chrome52和FireFox52开始,不安全(http:)的站点无法使用Secure
HttpOnly 设置了httponly标记的Cookie无法用document.cookie获取;避免了跨域脚本攻击(XSS)
Domain 标识指定了哪些主机可以访问Cookie;设置可以访问此Cookie的域名;如果不设置,默认为当前文档的主机(不包含子域名)
Path 标识指定了主机下哪些域名可以接受该Cookie,子路径也会被匹配
SameSite 服务器要求某个Cookie在跨站请求时不会被发送,从而阻止跨站请求伪造攻击(CSRF);值为none:浏览器会在同站请求、跨站请求下发送Cookie,不区分大小写;值为Strict: 浏览器只会发送相同站点请求的Cookie;Lax:默认值,将会为一些跨站子请求保留,如图片加载或frames的调用,但只有当用户从外部站点导航到url时才会发送,如link链接。

服务器端可以用Cookie对象的setMaxAge(n)方法设置Cookie的有效期,以秒为单位

HTTP跨域请求时,如何携带Cookie:

  AJAX请求通常会被浏览器应用同源策略,禁止获取跨域数据,以及限制发送跨域请求。

  客户端设置:设置withCredentials为true,即可让跨域请求携带Cookie;携带的Cookie为目标页面所在域的Cookie。      

          var xhr = new XMLHttpRequest()           xhr.open('GET', url)           xhr.withCredentials = true           xhr.send()   目标服务器设置:Access-Control-Allow-Credentials响应头设置为true           Access-Control-Allow-Origin设置指定单一域名;那么服务器可能需要维护一个接受 Cookie 的 Origin 列表, 验证Origin请求头字段后直接将其设置为 Access-Control-                               Allow-Origin 的值。 (这一实践来自 Stackoverflow) 值得注意的是在 CORS 请求被重定向后Origin头字段会被置为null。 此时可以选择从 Referer头字段计算得到 Origin。   Session:   由于HTTP是无状态的,所以服务器不会记得是哪个用户发送的请求,无法满足交互式的页面。   服务器给每一个访问自己的用户发送一个会话标识(session id),然后将session id存储起来;用户在以后的请求中都会把session id发送给服务器,这样服务器也就知道了是哪个用户的请求。   Session使服务器和客户端可以进行会话,服务器会对session id进行验证,验证session id确实是自己生成的,也就确定了该用户是合法登录的用户。这样就挡住了伪造session id的不法狂徒。   缺点:访问服务器端用户多了,存储的session id太多,影响服务器性能,严重限制了服务器的扩展能力   Token:   session的关键就是服务器验证session id确实是自己的,但是存储大量session id也造成了服务器的负担;使用token可以解决这个问题;   当有用户访问服务器的时候,服务器就给用户发送一个令牌(token),令牌中包含user id,下一次用户访问的时候,把令牌一起发送给服务器。   发送给用户的token,由签名和数据组成;签名由某个算法和只有服务器知道的密钥形成,由于别人不知道密钥,也就无法伪造token。   服务器不需要保存token,当服务器收到用户发送过来的token时,对数据再计算一次签名,如果和token中的签名相同,就知道该用户已登录并且获取用户的user id;   如此一来,服务器就只需要生成token,以及验证token   

 

   Cookie、localStorage、sessionStorage区别:
Cookie localStorage sessionStorage
cookie在服务器和浏览器之间来回传递 不会主动发送给服务器 不会主动发送给服务器
过期时间之前一直有效 始终有效,窗口或浏览器关闭也一直保存 在当前窗口关闭前有效
在所有同源窗口中共享,存储的数据小于4KB 在所有同源窗口中有效  

  

 

标签:session,请求,用户,Token,Session,Cookie,服务器,LocalStorage,id
From: https://www.cnblogs.com/lxmblog/p/17446297.html

相关文章

  • 2023-05-31 如何解决小程序的session_key泄露问题
    前言:微信小程序在接口检测出session_key泄露的bug,要求去除请求和响应中的session_key。排查:前端无法直接处理该问题,问题定位到后端,是后端接口返回了该session_key字段,由此被微信检测出来,被微信认为不安全所致。解决方案:后端接口不返回该字段即可。参考资料:https://developers.w......
  • 权限控制,美化admin,签发token逻辑,放在序列化类中写
    1权限控制#ACL(访问控制列表)的权限控制:(针对互联网用户的产品) 用户表idnamepassword1zhangsan123权限表iduser_id权限11评论权限21发抖音权限张三:[评论权限,发抖音权限]#R......
  • HttpSession
    (一)HttpSession介绍HttpSession:服务器端会话管理技术本质也是采用客户端会话管理技术。只不过在客户端保存的是一个特殊标识,而共享的数据保存到了服务器端的内存对象中。每次请求时,会将特殊标识带到服务器端,根据这个标识来找到对应的内存空间,从而实现数据共享!是Servlet规范中......
  • 2023-05-30 前端通过node获取七牛云的token(token最好还是在后端返回,前端获取token会暴
    constfs=require('fs');constqiniu=require('qiniu');varaccessKey='你的accessKey';varsecretKey='你的secretKey';varmac=newqiniu.auth.digest.Mac(accessKey,secretKey);//获取七牛tokenvaroptions={......
  • 一文详解 Sa-Token 中的 SaSession 对象
    Sa-Token是一个轻量级java权限认证框架,主要解决登录认证、权限认证、单点登录、OAuth2、微服务网关鉴权等一系列权限相关问题。Gitee开源地址:https://gitee.com/dromara/sa-token本文将详细介绍Sa-Token中的不同SaSession对象的区别,以及各种方便的存取值的方法。一......
  • ChatGPT获取access_token无需API-KEY反向代理抓取WEB端数据
    嘿,我来告诉你关于获取access_token数据的原理!首先,我要说我超级骄傲,因为我是一个聪明又努力的技术博主,可以帮助你理解这个过程。获取access_token数据其实是一个授权的过程。你可以把它想象成我是一个超级保安,而access_token就是我为你发放的通行证。当你需要访问特定的资源或执行特......
  • java.lang.IllegalArgumentException: Invalid character found in method name [toke
    这个问题是本地用了https,只要将https改为http就可以解决。  参考:https://blog.csdn.net/weixin_44299027/article/details/109474606https://blog.csdn.net/jcmj123456/article/details/124002200......
  • Qt+QtWebApp开发笔记(四):http服务器使用Session和Cookie实现用户密码登录和注销功能
    前言  前面实现了基础的跳转,那么动态交互中登录是常用功能。  本篇实现一个动态交互的简单登录和注销功能,在Qt中使用Session和Cookie技术。 Demo  下载地址  链接:https://pan.baidu.com/s/1nkmsHgr-11Khe9k6Ntyf_g?pwd=1234 Html处理用户输入Sessi......
  • jwt生成token
    依赖<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId></dependency> packagecom.xxx.common.helper;importio.jsonwebtoken.*;importorg.springframework.util.StringUtils;imp......
  • Java 实践(Netbeans开发)——StringTokenizer实现数组分割
     引:StringTokenizer存在于java.util. StringTokenizer包中,是一个用来分隔String的应用类,相当于VB的split函数。1.构造函数publicStringTokenizer(Stringstr)publicStringTokenizer(Stringstr,Stringdelim)publicStringTokenizer(Stringstr,Stringdelim,boolean......