session
2017年9月2日
12:30
Http是无状态协议,客户每次读取web 页面的时候,服务器都打开新的会话,而且服务器也不会维护客户上下文的信息。
session是一种保存上下文信息的机制,它是针对每一个客户的,变量的值保存在服务器端,通过sessionID来区分不同的客户,session 是以cookie或URL重写为基础的,默认使用cookie来实现,系统会创建一个名为JSESSIONID 的输出返回给客户端Cookie保存。
保存Session ID 的几种方式:
1、采用cookie,这样在交互的过程中,浏览器可以自动的按照规则把这个标识发送给服务器。服务器给每个Session分配一个唯一的JSESSIONID,并通过Cookie发送给客户端,当客户端发送新的请求的时候,将咋Cookie头中携带这个JSESSIONID,
2、当cookie 被认为禁止,URL重写,把sessionId加在URL路径的后面。
3、表单隐藏字段。
tomcat对SESSION的实现,一开始同时使用Cookie和URL回写机制,如果发现客户端支持Cookie,就继续使用Cookie,停止URL回写,如果发现Cookie被禁用,就一直使用URL回写。
Session 何时被删除:
1、程序调用httpSession.invalidate();
2、距离上一次收到客户端发送的sessionId 时间间隔超过了sessionde最大有效时间。
3、服务器进程被停止。
关闭浏览器只会使存储在客户端浏览器内存中的session cookie 失效,不会使服务器端的session 对象失效。
Cookie 和Session
Session 和cookie 都是为了用来保存状态信息,都是为了保存客户端状态的机制,它们都是为了解决HTTP无状态的问题而所做的努力。
Session可以用cookie来实现,也可以用URL回写的机制来实现,用Cookie来实现的Session可以认为是对cookie更高级的应用。
两者比较:
(1)cookie 将状态保存在客户端,Session将状态保存在服务器端。
(2)Cookie是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。有在HTTP的协议中定义,Session并没有在HTTP协议中定义
(3)Session是针对每一个客户的,变量值保存在服务器端,用一个sessionId 来区分是哪个用户session变量。这个值通过后用户的浏览器在访问的时候返回给服务器,当客户禁止cookie时,这个值也可能设置为由get来返回给服务器。
4)安全性;当你访问一个使用session 的站点,同时在自己的机子上建立一个cookie,建议在服务器端使用SESSION机制更安全,因为它不会任意读取客户存储的信息。
session的存储:Session机制是一种服务器端的集中,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。