什么是Session
Session是一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了
Session的工作原理
(1)浏览器端第一次发送请求到服务器端,服务器端创建一个Session,同时会创建一个特殊的Cookie(name为JSESSIONID的固定值,value为session对象的ID),然后将该Cookie发送至浏览器端
(2)浏览器端发送第N(N>1)次请求到服务器端,浏览器端访问服务器端时就会携带该name为JSESSIONID的Cookie对象
(3)服务器端根据name为JSESSIONID的Cookie的value(sessionId),去查询Session对象,从而区分不同用户。
Session的生命周期
一般来说默认是半小时。比如你登录一个服务器,服务器返回给你一个sessionID,如果登录成功之后的半小时之内没有对该服务器进行任何HTTP请求,那么当半小时后你再次进行HTTP请求时,会提示你重新登录。
session和cookie的区别
1.cookie和session都是一种存储信息的手段,其中cookie存储在客户端(浏览器),而session存储在服务器端。前者容易伪造,后者基本不可能。session id(Tomcat称为JsessionId)就是session存在cookies中的key。
2.cookie因为存储在客户端,所以可能会存在cookie欺骗问题(修改session id,从而直接获取访问服务器的资格),而session通常更加安全
3.若均存储在session中,当访问增多时候,会比较占据服务器性能。
4.cookie因为存储在客户端,因此受到存储性能限制。单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie
5.cookies 本质就是http协议中一个配置项,很容易在多台服务器共享;session 不能在多台服务器共享,除非专门使用了分布式的session框架处理了。