会话:客户端打开与服务器的连接发出请求到服务器响应客户端请求的全过程称之为会话。
http协议是“无状态”协议,不能保存用户信息,需要判断是否是同一个用户,需要会话跟踪。cookies和session都是用来跟踪浏览器用户身份的会话方式,但两者应用场景不一样。
Cookie 是Web 服务器发送给客户端(浏览器)的一小段信息,客户端请求时可以读取该信息发送到服务器端,进而进行用户的识别。对于客户端的每次请求,服务器都会将 Cookie 发送到客户端,在客户端可以进行保存,以便下次使用。
Session 代表着服务器和客户端一次会话的过程。每一个用户都有一个不同的 session,各个用户之间是不能共享的,是每个用户所独享的,在 session 中可以存放信息。Session 的实现依赖于 Cookie,如果 Cookie 被禁用,那么 session 也将失效。
(1)浏览器端第一次发送请求到服务器端
(2)服务器端创建Cookie,该Cookie中包含用户的信息,然后将该Cookie发送到浏览器端
(3)浏览器端再次访问服务器端时会携带服务器端创建的Cookie
(4)服务器端通过Cookie中携带的数据区分不同的用户
(1)浏览器端第一次发送请求到服务器端,服务器端创建一个Session,同时会创建一个特殊的Cookie(name为JSESSIONID的固定值,value为session对象的ID),然后将该Cookie发送至浏览器端
(2)浏览器端发送第N(N>1)次请求到服务器端,浏览器端访问服务器端时就会携带该name为JSESSIONID的Cookie对象
(3)服务器端根据name为JSESSIONID的Cookie的value(sessionId),去查询Session对象,从而区分不同用户。
第一种,在每次请求中都携带一个 SessionID 的参数放入URL
第二种,Token 机制。Token 的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。随机且无状态,用户信息都被加密到token中,服务器收到token后解密就可知道是哪个用户。需要开发者手动添加。
Cookie在生成时就会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。有些页面将Cookie的生存周期设置为“0”或负值,这样在关闭浏览器时,就马上清除Cookie,不会记录用户信息,更加安全。
①存在的位置:
Cookie存在于客户端,临时文件夹中; Session存在于服务器的内存中,一个Session域对象为一个用户浏览器服务
②安全性
Cookie是以明文的方式存放在客户端的,安全性低,可以通过一个加密算法进行加密后存放; Session存放于服务器的内存中,所以安全性好
③网络传输量
Cookie会传递消息给服务器; Session本身存放于服务器,不会有传送流量
④生命周期(以20分钟为例)
Cookie的生命周期是累计的,从创建时,就开始计时,20分钟后,Cookie生命周期结束;
session的生命周期是间隔的,从创建时,开始计时如在20分钟,没有访问Session,那么Session生命周期被销毁。但是,如果在20分钟内(如在第19分钟时)访问过Session,那么,将重新计算Session的生命周期。关机会造成Session生命周期的结束,但是对Cookie没有影响
⑤访问范围
Cookie为多个用户浏览器共享; Session为一个用户浏览器独享