session、cookie、token

目录

 

session、cookie、token

总览:

cookie如何实现session?

session保存在哪?

cookie保存在哪?除了session id里面还有什么?

除了cookie,还有什么方式实现session?

token是啥?

token的好处?


session、cookie、token

总览:

http是一个无状态协议,客户端向服务器端发送一个http请求,服务器端返回一个http响应报文,在这个过程中服务器端并不会记录什么信息,但是有时候我们是需要记录用户的状态,因此就需要某种机制来识别用户,保存用户的状态,而这种机制就是session。而cookie就是实现session的一种方式。

参考:https://www.cnblogs.com/moyand/p/9047978.html

cookie如何实现session?

当用户第一次访问服务器端的时候,服务器端会为它创建一个session,并且用一个唯一标识session id来进行标识,服务器端发回给客户端的响应报文里就有一个set-cookie字段,里面的值就是session id。而客户端收到后就把这个值保存在cookie里面(cookie保存在本地文件里面),并且之后发送的请求报文都包含 Session ID,这样服务器端就知道你是谁了。

session保存在哪?

session默认保存在服务器端的一个文件中(也可以放在数据库,内存中)

cookie保存在哪?除了session id里面还有什么?

cookie保存在客户端的本地文件中,cookie还可以保存用户名密码来进行免密登录

除了cookie,还有什么方式实现session?

还可以用URL重写的方式。即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。


token是啥?

这个其实我也不是很理解,可能有问题?

token我觉得跟syn cookie的思想有点类似。我服务器端不需要保存session,而让session 由客户端来保存。但是服务器端怎么才能验证这个session是合法的呢?那就对数据做一个签名,就是用一个哈希函数得到数据的映射值,再用一个只有我才知道的密钥对其进行加密,然后把这个签名和数据一起作为token 发给客户端,让它保存在本地,  而客户端之后的请求都会携带上这个token,而服务器端不需要保存token,只需要验证这个token里面的数字签名就ok了。

注意:Token 中的数据是明文保存的, 还是可以被别人看到的, 所以我不能在其中保存像密码这样的敏感信息。

其具体过程:
1.用户通过用户名和密码发送请求。
2.程序验证。
3.程序返回一个签名的token 给客户端。
4.客户端储存token,并且每次用于每次发送请求。
5.服务端验证token并返回数据。


token的好处?

1. 降低服务器内存资源的开销,因为现在不需要在服务器端保存session了

2.  可扩展性,可以更好的实现负载均衡。

现在我可以随时在服务器加新的机子,而不用考虑这个连接的session id保存在哪台机子上。这个连接的这一个请求可以由机器a来处理,而下一次请求可以由机器b来处理,因为服务器只需要用相同的哈希算法和自己的私钥去验证token就完事了。

 

### 回答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、付费专栏及课程。

余额充值