session超时和cookie过时

1、Cookie的过时和Session的超时有什么区别?
 
会话的超时由服务器来维护,它不一样于Cookie的失效日期。首先,会话通常基于驻留内存的cookie
不是持续性的cookie,于是也就没有截至日期。即便截取到JSESSIONID cookie,并为它设定一个失效日期发送出去。浏览器会话和服务器会话也会大相径庭。
 
2、session cookie和session对象的生命周期是同样的吗?
 
当用户关闭了浏览器虽然session cookie已经消失,但session对象仍然保存在服务器端
 
3、是否只要关闭浏览器,session就消失了?
 
程序通常都是在用户作log off的时候发个指令去删除session,然而浏览器历来不会主动在关闭以前通知服务器它将要被关闭,所以服务器根本不会有机会知道浏览器已经关闭。
 
服务器会一直保留这个会话对象直到它处于非活动状态超过设定的间隔为止。
之因此会有这种错误的认识,是由于大部分session机制都使用会话cookie来保存session id,而关闭浏览器后这个session id就消失了,再次链接到服务器时也就没法找到原来的session。
 
若是服务器设置的cookie被保存到硬盘上,或者使用某种手段改写浏览器发出的HTTP请求报头,把原来的session id发送到服务器,则再次打开浏览器仍然可以找到原来的session。
 
偏偏是因为关闭浏览器不会致使session被删除,迫使服务器为session设置了一个失效时间,当距离客户上一次使用session的时间超过了这个失效时间时,服务器就能够认为客户端已经中止了活动,才会把session删除以节省存储空间。web

<system.web>
<sessionState mode="InProc" cookieless="false" timeout="50"/>
</system.web>


由此咱们能够得出以下结论:
关闭浏览器,只会是浏览器端内存里的session cookie消失,但不会使保存在服务器端的session对象消失,一样也不会使已经保存到硬盘上的持久化cookie消失。
 
4、如何使用会话(session)显示每一个客户的访问次数?
 
因为客户的访问次数是一个整型的变量,但session的属性类型中不能使用int,double,boolean等基本类型的变量,因此咱们要用到这些基本类型的封装类型对象做为session对象中属性的值。
但像Integer是一种不可修改(Immutable)的数据结构:构建后就不能更改。这意味着每一个请求都必须建立新的Integer对象,以后使用setAttribute来代替以前存在的老的属性的值。
例如:数组

HttpSession session = request.getSession();
SomeImmutalbeClass value = (SomeImmutableClass)session.getAttribute(“SomeIdentifier”);
if (value= =null){
    value = new SomeImmutableClass(…); // 新建立一个不可更改对象
}else{
    value = new SomeImmutableClass(calculatedFrom(value)); // 对value从新计算后建立新的对象
}
session.setAttribute(“someIdentifier”,value); // 使用新建立的对象覆盖原来的老的对象

 
使用可变的数据结构,好比数组、List、Map或含有可写字段的应用程序专有的数据结构。经过这种方式,除非首次分配对象,不然不须要调用setAttribute。浏览器