session的总结


session的工作原理
客户端提交表单,其中包含从cookie得到的sessionid,服务器根据这个sessionid,查找:
    1、存在这个session对象,则判断是不是已经过期这个session对象,没有返回,否则,返回一个新的session对象  
    2、没有这个session对象,返回一个新的session对象

影响session生命周期的因素:
    1、session的MaxInactiveInterval
    2、session的invalidate
    3、服务器是否启动。
   
【注意】与浏览器是否关闭没有关系 
               session的removeAttribute(String attrib)

   
   ------------------------------------------------------
     当你第一次访问一个网站的时候,网站服务器会在响应头内加上Set- Cookie:PHPSESSID=nj1tvkclp3jh83olcn3191sjq3(php服务器),或Set-Cookie JSESSIONID=nj1tvkclp3jh83olcn3191sjq3(java服务器)信息,此信息是服务器随机生成的,放在服务器内存里,为 了标识唯一的客户端用户,内容不会重复,这就是sessionid.
   当浏览器得到这个sessionid会将它放在自己的进程内存里,这里不同的浏览器会有所不同,IE进程间不能共享这个sessionid,也就是新开一 个IE将不能共享这个sessionid;而Firefox进程间可以共享.然后你继续发请求给这个网站的时候,浏览器就会把这个sessionid放在 请求头里发送给该服务器了,这样服务器得到sessionid后再和自己内存里存放的sessionid对比锁定客户端,从而区分不同客户端,完成会话.
   可以看出如果用这种方式,当用户在会话的过程中关闭浏览器结束进程,则这个sessionid将消失,如果用户又打开浏览器想继续这次会话的时候,就会因 为发送的请求中没有这个sessionid而使服务器无法辨别该把那个session信息给他,注意(这个时候服务器端的sessionid和 sessionid所指向的session都还存在,只是没有正确的sessionid和它匹配而占用服务器内存,只有session过期或服务器重启才 释放内存).
   上面这种方式叫会话cookie,把cookie放在浏览器内存里,只能在这个浏览器的内存范围里完成会话,是一种不长久的方式,为了能长久会话,就出现 了持久化cookie,把cookie固化在用户的计算机上,现在的cookie不单单能存放sessionid,还能放用户信息,样式表信息等.
   如果用户禁止了所有cookie的使用,那么会话cookie和持久化cookie都不能用了,有个方案也可以解决问题,就是URL重写,这里要说下的就 是URL重写只能实现会话cookie的效果,持久会话实现不了.
   

补充一点内容:客户端COOKIE又分为进程COOKIE和持久COOKIE,简单点说就是COOKIE要么保存在浏览器进程中,随浏览器关闭而消失,要 么保存在客户端本地文件中。具体采用哪种保存方式,由服务端决定。一般在SERVLET中使用javax.servlet.http.Cookie的 setMaxAge()来决定是进程COOKIE还是持久COOKIE。在TOMCAT中,TOMCAT创建了jsessionid这个COOKIE,并 且设置setMaxAge(-1),也就是说TOMCAT下jsessionid的COOKEI是进程COOKIE,在客户端本地是看不到这个 COOKIE文件的。