为什么会有这种会话机制
1.http协议是无状态的。也就是说每次与服务器进行连接,都必须重新发送请求。连接一次,请求一次。上次和这次的连接没有任何关系。底层的TCP连接会断开,用户的ip地址可能会发生变化。但是浏览器又需要记录访问者。
2.判断浏览器需要去判断一下,两次的请求是否是同一个人的请求。这时我们就需要进行身份验证来判断。
cookie
1.cookie:是web服务器发给用户浏览器的一段数据,浏览器记住这个数据,在用户对于后期的操作进行一定的身份验证。cookie相当于服务端发给用户的身份凭证。如果攻击得到了用户的cookie值,相当于得到了用户身份使用cookie是为了对数据的保护。在浏览器可以十分方便看见cookie,所以cookie对于用户来讲是完全公开的
2.cookie的特点
a.Cookie存储在客户端(浏览器),发送请求时自动携带放在请求头中。
b.单个Cookie保存的数据不能超过4KB。
c.Cookie的安全性不高,别人可以分析存放在本地的Cookie并进行Cookie欺骗。
d.Cookie默认不可跨域,可通过特殊的操作如:设置withCredentials属性为true实现跨域。
e.cookie的有效时间:cookie默认有效期非常短暂,存在于web浏览器会话期间,当浏览器关闭,cookie也就消失了。如果要延长cookie的有效期,可以设置max-age属性(单位秒)
3.cookie的主要属性
a.domain:用于指定cookie在哪些域名中生效。访问什么域名的时候发生这一个特定的cookie
b.path:cookie的生效路径,只有这个域名或者这个域名的子域名才能访问这个cookie
c.expires:设置cookie的有效期,到期后,浏览器自动删除。如果为none,关闭浏览器临时cookie直接删除。有些网站避免用户麻烦,选用“永久性”cookie不安全。设置有效期的cookie可以使cookie在有效期内不被删除。
d.httponly:大多数情况下,cookie只需要和服务端进行交互,并不需要让客户端js读取。当允许的时候增加了cookie泄露的风险。httponly让cookie只能使用http/https传输,使js无法读取到cookie
e.secure:使cookie只会在https请求时发送给服务器,没有加密的http无法发送这个cookie
f.samesite:
1.none:不做限制,什么情况都可以发送cookie
2.lax:一般情况下跨站请求不发送cookie,但点击连接发送cookie,提交表单,get提交表单带cookie,post一般不带
3.strict:完全禁止跨站请求使用cookie,点击站外连接也不发送cookie。url的域名属于同一个站点发送cookie(一般没有)
g.smaeparty:将企业的多个网站,允许企业定义一个可信站点集合
4.使用cookie
1.客户端发送请求到服务端
2.服务端收到请求生成session会话
3.服务端响应客户端,在响应头中设置set-cookie,其中包括一个重要的信息sessionid,一一对应。
4.客户端下次使用cookie,浏览器在请求头中自动加上cookie
5.客户端发送其他,也会携带cookie
6.服务端收到了请求,并且验证cookie信息,是否存在sessionid,存在且一一对应则可以正常响应
session
1.session
在cookie中提到了sessionid用于确定用户认证,一般情况下session由服务端创建,保存在服务器,客户端和服务端之间的认证使用sessionid确认。如果在服务端包含sessionid,表示客户端和服务端之前硬已经创建过了session,去查看session,如果没有找到则可以创建一个新的session,并且sessionid和session一一对应。把sessionid发送到客户端存放在cookie中,如果找到了对应的session则验证通过。
2.session的特点
a.session 比 cookie 更加安全,因为它是存在服务端的,cookie 是存在客户端的。
b.session 可以存储任意数据。
c.session 有效期都比较短。
d.session 存储空间比较大。
e.session的有效时间:Session的默认失效时间是30分钟,session的过期时间是从session不活动的时候开始计算,如果session一直活动,session就总不会过期,从该Session未被访问,开始计时; 一旦Session被访问,计时清0;
3.使用session
a.客户端发送请求
b.服务端创建session,将唯一标识sessionid设置在set-cookie响应中,放在客户端
c.客户端发送请求携带cookie,通过sessionid到服务端进行验证
d.正确响应
token
先抓一下包看看token
1.token
是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次请求后,服务器生成一个token便将此token返回给客户端,以后客户端只需带上这个token前来请求数据即可。(不会由cookie-session那么大的内存消耗)通过这种方式服务器端就不需要保存 Session 数据了,只用在客户端保存服务端返回给客户的 Token 就可以了。
2.token的特点
a.Token不需要存储用户信息,节约了内存,token签发后存储在客户端,不占用服务器资源,可减轻服务器压力
b.由于不存储信息,客户端访问不同的服务器也能进行鉴权
c.Token可以采用不同的加密方式进行签名,提高了安全性。比如由uid+time+sign进行加密算法
d.每一次请求都需要携带 token,需要把 token 放到 HTTP 的 Header 里
3.使用token
a.客户端发出请求
b.服务端验证请求是否正确
c.验证成功,服务端发送token给到客户端
d.客户端把token存储起来
e.客户端再次发送请求,带上token
f.验证成功,返回数据
总结
cookie是服务器端生成发送给客户端在客户端保存的
session是放在服务器端来和客户端的cookie做匹配的
Token存储在客户端,不占用服务器资源,可减轻服务器压力
归根结底,cookie,session,token的作用是在浏览器上保存用户的登录态,其实就是实现用户在网页上登录过一次后,一段时间内再次访问不需要重新登录,会实现自动登录的一个效果。具体使用什么方式,主要是看什么情况,具体的情况使用具体的会话方式。
标签:青云,会话,token,session,cookie,服务端,请求,详解,客户端 From: https://blog.csdn.net/2402_86439553/article/details/140782178