09 二月 2008

Session和Cookie的学习

Session属于服务器端技术,在服务器端创建,其实质通过散列表来存储信息。例如HashMap对象存储属性名和属性值。


CookieNetscape公司发明的,它也用来跟踪用户会话。但是Cookies是由服务器端发送给客户端的信息片段,存储在客户端浏览器的内存或者客户端硬盘上,在客户请求中发回。


SessionCookie的最大区别在于:前者在服务器端保存,而后者在客户端保存。


为了跟踪用户会话,服务器端在创建Session后,需要将Session ID交给客户端,在客户端下次请求时,将这个ID随请求一起发送回来。可以采用Cookie(这种保存Session IDCookie我们称之为会话Cookie)URL重写的方式,将Session ID发送给客户端。


Servlet规范中,会话跟踪的Cookie的名字必须是JSESSIONID,它通常保存在浏览器的内存中。浏览器内存中的会话Cookie在关闭浏览器的时候会自动删除,不能在多个浏览器进程之间共享。而如果我们自己创建一个Cookie实例,则可以保存Cookie信息,在浏览器关闭后,再次打开,仍然存在,而且可以在多个浏览器进程间共享。


但是要注意,虽然每次打开一个新的浏览器进程,会发现开始一个新的会话,但是并不是意味着上次的Session消失了。主要是因为会话Cookie保存在浏览器内存中,当浏览器关闭时,会话Cookie被删除了,从而导致下一次浏览器请求中,没有相应的Session ID,从而导致服务器创建新的会话。

没有评论: