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中, 直到失效为止,.