session和cookie

发布时间 2023-08-08 22:06:12作者: Avicii_2018

Cookie是保存在客户端、Session保存在服务端,两者都是用来校验用户登录状态的。因为http是无状态的,所以客户端每次向服务端发起请求的时候,服务端是不认识客户端的,你

 

session是一种服务器端的对象. 保存在服务器中.  每个session有一个唯一的sessionid. 

 

只要某个浏览器访问了某个服务器, 这个服务器就会为这个浏览器创建唯一的sessionid

 

每打开一个浏览器, 这个浏览器就被标注为一个唯一的客户端.  当这个客户端第一次向某个服务器发送请求后, 服务器会自动生成对应这个客户端的session. 并把它的sessionid通过响应response返回(response.headers),   然后客户端会将sessionid 作为cookie的一个字段储存在客户端cookie中.  第二次客户端请求该服务器就会将cookie放在请求头中,cookie中有sessionid ( 注意: 第一次请求时,请求头headers中是没有cookie的) .  然后服务器就会根据该sessionid找到对应的session.进而进行是否登录的判断. 

 

当关闭浏览器客户端后, 再次重启浏览器客户端,  上一次访问服务器的sessionid仍然储存在服务器上, 但当重启客户端后再次访问服务器. 此时服务器会生成性的sessionid, 进而客户端会根据该sessionid生成新的cookie.  而在客户端再次访问时的请求头中的cookie就会包含新的sessionid. 所以虽然原来的session还存在服务器中, 但已经登录的信息却存储在原来的cookie中.  新的sessionid不含有的登录信息, 该客户端会被判断为未登录的状态.

 

其实服务器是不会知道浏览器关闭了没有,  所以关闭浏览器时服务器是不会删除session的.也正是这个原因服务器才会设置一个session失效时间的.

等距离上一次使用该session的时间达到设置的失效时间时, 服务器就会认为客户端已停止活动.便会将相应的session删除.

 

对于会话cookie, 关闭一个浏览器, cookie就会消失,  储存在cookie中的sessionid也会消失. 重启浏览器访问服务器会产生新的sessionid和cookie.

 

 

 

 

 

 

当然,我们可以在登陆时点击下次自动登录. 比如说CSDN"记住我一周", 或者我们的购物车信息可以在切换不同的浏览器时依然可用. 这就要用到我们上文提到的另一种cookie了----->硬盘中cookie, 这时sessionid 将长期保存在硬盘上的cookie中, 直到失效为止,.