彻懂cookie,session,token是干啥的

本文详细介绍了Cookie、Session和Token三种Web身份验证机制。Cookie是保存在客户端的小段文本信息,分为会话级和持久化;Session是服务器端的数据结构,用于跟踪用户状态;Token作为安全的身份验证方式,包含用户信息并加密。Cookie依赖于客户端的Cookie存储,可能存在安全风险,而Session在分布式环境中可能面临挑战,Token则更适用于无状态和分布式环境。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一 什么是cookie呢?

二 什么是Session?

三 什么是Token?


 

登录网站,今输入用户名密码登录了,第二天再打开很多情况下就直接打开了。这个时候用到的一个机制就是cookie。 session一个场景是购物车,添加了商品之后客户端处可以知道添加了哪些商品,而服务器端如何判别呢,所以也需要存储一些信息就用到了session。

 一 什么是cookie呢?

cookie是服务器产生的保存在客户端的一小段文本信息,格式是字典,键值对。

cookie分类:
        会话级cookie:保存在内存,当浏览器关闭会自动消失。
        持久化cookie:保存在硬盘,当浏览器关闭不会消失,有自己的失效时间

Cookie 有以下的一些属性来控制其行为

        1.Expires 过期时间

        2.Max-age 存后时间

        3.Domain 生成 Cookie 的域

        4.Path 访问路径

        5.Secure 加密设置,防止攻击

二 什么是Session

      Session是另一种记录客户状态的机制,它是在服务端保存的一个数据结构。
用户第一次登录后,浏览器会将用户信息发送给服务器,服务器会为该用户创建一个SessionId,并在响应内容(Cookie)中将该SessionId一并返回给浏览器,浏览器将这些数据保存在本地。当用户再次发送请求时,浏览器会自动的把上次请求存储的Cookie数据自动的携带给服务器。
服务器接收到请求信息后,会通过浏览器请求的数据中的SessionId判断当前是哪个用户,然后根据SessionId在Session库中获取用户的Session数据返回给浏览器。

cookie和session区别

       存储数据量方面:session 能够存储任意的 java 对象,cookie 只能存储 String 类型的对象,一个在客户端一个在服务端。因Cookie在客户端所以可以编辑伪造,不是十分安全。

        Session过多时会消耗服务器资源,大型网站会有专门Session服务器,Cookie存在客户端没问题。域的支持范围不一样,比方说a.com的Cookie在a.com下都能用,而www.a.com的Session在api.a.com下都不能用,解决这个问题的办法是JSONP或者跨域资源共享。

三 什么是Token?

        token的意思是“令牌”,是用户身份的验证方式,最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由token的前几位+盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接token请求服务器)。还可以把不变的参数也放进token,避免多次查库

 

token可以抵抗csrf,cookie+session不行

        假如用户正在登陆银行网页,该网页未对csrf攻击进行防护。攻击者就可以注入一张图片。倘若是session+cookie,用户打开网页的时候就已经转给Tom1000元了。因为session一旦建立,当前域页面以及该页面路径以下所有页面都共享cookie。在img请求的瞬间,cookie会被浏览器自动添加到请求头中。但token不同,开发者在每次发起请求时手动将 Token 添加到请求中。即打开页面请求img时,该请求头中没有token

分布式情况下的session和token

    我们已经知道session时有状态的,一般存于服务器内存或硬盘中,当服务器采用分布式或集群时,session就会面对负载均衡问题。

    负载均衡多服务器的情况,不好确认当前用户是否登录,因为多服务器不共享session。这个问题也可以将session存在一个服务器中来解决,但是就不能完全达到负载均衡的效果。当今的几种解决session负载均衡的方法。

     而token是无状态的,token字符串里就保存了所有的用户信息

总结

 session存储于服务器,可以理解为一个状态列表,拥有一个唯一识别符号sessionId,通常存放于cookie中。服务器收到cookie后解析出sessionId,再去session列表中查找,才能找到相应session。依赖cookie

 cookie类似一个令牌,装有sessionId,存储在客户端,浏览器通常会自动添加。               

 token也类似一个令牌,无状态,用户信息都被加密到token中,服务器收到token后解密就可知道是哪个用户。需要开发者手动添加。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值