》》Session是存在硬盘上的?
因为HTTP是无状态的协议,客户端关闭浏览器不能在服务器端捕获,所以为了维持客户状态,浏览器第一次访问服务器的时候服务器会在服务器端(用Session.setAttribute(X)设置的Session上的数据是在服务器端内存里面的)创建一个Session(如果你指定这个页面是无状态的就不会,一般很少这样做),并把Session id 发送给客户端,通常是装在一个只要关闭浏览器就失效的Cookie中发送给浏览器,所以有时候客户端禁用Cookie可能就会有问题。
如果服务器端的Session不销毁的话就会越来越多,直到内存资源耗尽,所以服务器会在每次请求到达的时候更新对应session的上次活动的时间,Session长时间不活动(比如20分钟)服务器端要销毁这个session。长时间不活动就会注销这种情况的原因就是这样的。
注意到没有,如果客户端浏览器关闭,服务器端的session仍然存在直到超时为止,你新开一个浏览器又是一个新session(从一个浏览器中的超链接打开的新浏览器窗口与原来的共享session)。。在访问量大的情况下,这些session占用的内存是很可观的,将session的超时时间设置的很短可以节约内存,还有一个原则就是不要把什么东西都放到session上,不用的session变量马上remove掉。
在基于Struts应用中session id是通过一个叫jsessionid的变量用get递的,你可以在浏览器的地址栏里看到
以上这些session的维持工作都是服务器做的,通常不需要你来参与。如果要实现自动登录这样的功能才需要自己做cookie
有的网站不关闭浏览器永不超时是做了特殊处理的,实际上请求发送过去如果session超时了,他们是通过某种机制实现自动登录。比如保存cookie,也有将用户名和密码随着每次请求发送的。