关于session、cookie、token登录状态判断

session 是后端的概念,session 本质目的就是后端需要区分出每次请求是哪个用户产生的。用 token 的情况下,就是找到这个 token 对应的用户,用 cookie 就是找到这个 cookie 对应的用户,token 、cookie 本质都是一串字符串,一般做法是后端在 redis 里存每个 token\session 对应的 user_id

前后端分离的情况下,token 一般是前端存在 localstorage 中 ,在进行 xhr 请求时放在 herder 的一个字段里面,一般是 authorization 字段

非分离的情况下一般用 cookie,这时也基本上没有 xhr 类型的请求,也没有跨域请求,所以 cookie 会随着 get 或者 post 一同提交到后端

跨域请求 /xhr 类型请求也可以设置 cookie 并且可以自动带上 cookie,具体内容要查一下文档,忘记了。

 

1.cookie 呢,就是返回头有个 set-cookie,让浏览器保存 cookie,cookie 是保存在浏览器
2.session 呢是浏览器和服务端都保存,服务端给一个 sessionid 存 cookie,下次请求带上这个 cookie,服务端拿着 sessionid 去数据库或者缓存区查,这种 session 方案是依赖于 cookie
3.token 就是存在浏览器的 localstorage,下次请求带上这个 token,服务端再去存储中找 token 确定用户
4.还有一种 token,叫 jwt,和 cookie 很像,也是存浏览器,比如 localstorage,但是存浏览器的话,服务端就没办法把他 revoke 掉,也就取消,没办法退出登录
此外还有 sessionstorage,VUE 还有个 vuex 状态存储
然依赖 cookie 的 session 方案不好解决跨域的问题,比如你的 cookie 是设置在这个域下面的,那请求另外一个域,不会带上这个 cookie,或者你要用 js 去操作这个域(开始胡说八道),那你的 cookie 就不能是 http only
然后 sessionstorage 我还不会,你去百度一下,然后告诉我,阿里嘎多

 

原文地址:https://www.v2ex.com/t/668743

 

### 回答1: SessionCookieToken、JWT都是在Web开发中用于管理用户身份认证和会话管理的工具。 1. SessionSession指的是服务器端保存的用户信息。当用户登录成功后,服务器会创建一个session,为该用户分配一个session ID,并将该ID保存到cookie中,发送给客户端。客户端浏览器保存了这个cookie,以后每次请求都会带上这个cookie,服务器通过这个cookie就可以识别出用户身份,从而进行相应的操作。Session机制存在一定的风险,比如会话劫持、会话固定等问题,需要注意安全性。 2. CookieCookie是一种客户端保存用户信息的机制,它是由服务器在响应HTTP请求时通过Set-Cookie头部字段发给客户端浏览器的一小段文本信息。浏览器将这些信息保存在客户端,以后每次向服务器发送请求时都会自动带上这些cookie,从而实现身份认证和会话管理。但是Cookie也存在一些安全问题,比如会话劫持、跨站脚本攻击等问题。 3. TokenToken是一种用户身份认证和授权的机制,通常由服务器生成,以便在客户端和服务端之间进行身份认证和授权。客户端在登录成功后,服务器会为该用户生成一个Token,并将Token发送给客户端浏览器。客户端在之后的请求中需要携带该Token,服务器验证Token的有效性后,就可以识别出用户身份,并进行相应的操作。Token相比SessionCookie,具有更高的安全性和可扩展性。 4. JWT:JWT是一种基于Token的身份认证和授权机制。JWT包含三部分,分别是头部、载荷和签名。头部包含加密算法和类型等信息;载荷包含用户的身份信息和相关的元数据等信息;签名则是对头部和载荷进行签名生成的一段密文,用于验证Token的有效性。JWT具有无状态、可扩展、跨域等特点,被广泛用于Web开发中的用户身份认证和授权。 ### 回答2: SessionCookieToken和JWT都是常见的身份验证和会话管理方法。下面我会分别介绍它们。 SessionSession是服务器端记录用户状态的一种机制。当用户通过用户名和密码登录后,服务器会为该用户创建一个唯一的Session。之后,用户再发送请求时,服务器会根据Session来识别用户并获取用户的状态信息。 CookieCookie是一种在客户端存储的小型文本文件。在用户通过用户名和密码登录成功后,服务器可以将一个包含Session信息的Cookie发送给客户端,客户端会将该Cookie保存下来。之后,客户端发送请求时,会自动附带上该Cookie,用于向服务器证明用户的身份。 TokenToken是一种代表用户身份的令牌。与Cookie不同,Token是在客户端保存的,并且不需要服务器端存储用户状态。当用户登录成功后,服务器会生成一个Token并发送给客户端,客户端将其保存起来。之后,客户端发送请求时,会将Token作为请求头信息的一部分发送给服务器,服务器根据Token验证用户身份。 JWT:JWT(JSON Web Token)是一种基于JSON的开放标准,用于在各方之间安全传输信息。它由三部分组成:Header、Payload和Signature。其中,Header用于描述JWT的元数据,Payload用于存储实际传输的数据,Signature用于验证JWT的合法性。在使用JWT进行身份验证时,服务器会生成一个JWT并发送给客户端,客户端将其保存起来。之后,客户端发送请求时,会将JWT作为请求头信息的一部分发送给服务器,服务器根据JWT验证用户身份的合法性。 总结:SessionCookieToken和JWT都是常用于身份验证和会话管理的方法,它们各有优劣和适用场景。SessionCookie依赖于服务器端存储用户状态,而Token和JWT则可以减轻服务器的负担,并且适用于分布式系统。其中,JWT由于其自包含性和可扩展性,在分布式系统和前后端分离的架构中得到了广泛应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值