二十三、利用isNew来判定用户是否为新旧用户的错误做法
*************************************************************************************
public boolean isNew()要领假如会话尚未和客户措施(欣赏器)产生任何接洽,则这个要领返回true,这一般是因为会话是新建的,不是由输入的客户请求所引起的。
但假如isNew返回false,只不外是说明他之前曾经会见该Web应用,并不代表他们曾会见过我们的servlet或JSP页面。
因为session是与用户相关的,在用户之前会见的每一个页面都有大概建设了会话。因此isNew为false只能说用户之前会见过该Web应用,session可以是当前页面建设,也大概是由用户之前会见过的页面建设的。
正确的做法是判定某个session中是否存在某个特定的key且其value是否正确
*************************************************************************************
二十四、Cookie的逾期和Session的超时有什么区别
*************************************************************************************
会话的超时由处事器来维护,它差异于Cookie的失效日期。首先,会话一般基于驻留内存的cookie
不是一连性的cookie,因而也就没有停止日期。纵然截取到JSESSIONID cookie,并为它设定一个失效日期发送出去。欣赏器会话和处事器会话也会截然差异。
*************************************************************************************
二十五、session cookie和session工具的生命周期是一样的吗
*************************************************************************************
当用户封锁了欣赏器固然session cookie已经消失,但session工具仍然生存在处事器端
*************************************************************************************
二十六、是否只要封锁欣赏器,session就消失了
*************************************************************************************
措施一般都是在用户做log off的时候发个指令去删除session,然而欣赏器从来不会主动在封锁之前通知处事器它将要被封锁,因此处事器基础不会有时机知道欣赏器已经封锁。处事器会一直保存这个会话工具直到它处于非勾当状态高出设定的隔断为止。
之所以会有这种错误的认识,是因为大部门session机制都利用会话cookie来生存session id,而封锁欣赏器后这个session id就消失了,再次毗连随处事器时也就无法找到本来的session。
假如处事器配置的cookie被生存到硬盘上,可能利用某种手段改写欣赏器发出的HTTP请求报头,把本来的session id发送随处事器,则再次打开欣赏器仍然可以或许找到本来的session。
恰恰是由于封锁欣赏器不会导致session被删除,迫使处事器为session配置了一个失效时间,当间隔客户上一次利用session的时间高出了这个失效时间时,处事器就可以认为客户端已经遏制了勾当,才会把session删除以节减存储空间。
由此我们可以得出如下结论:
封锁欣赏器,只会是欣赏器端内存里的session cookie消失,但不会使生存在处事器端的session工具消失,同样也不会使已经生存到硬盘上的耐久化cookie消失。
*************************************************************************************
二十七、打开两个欣赏器窗口会见应用措施会利用同一个session照旧差异的session
*************************************************************************************
凡是session cookie是不能跨窗口利用的,当你新开了一个欣赏器窗口进入沟通页面时,系统会赋予你一个新的session id,这样我们信息共享的目标就达不到了。
此时我们可以先把session id生存在persistent cookie中(通过配置session的最大有效时间),然后在新窗口中读出来,就可以获得上一个窗口的session id了,这样通过session cookie和persistent cookie的团结我们就可以实现了跨窗口的会话跟踪。
*************************************************************************************
二十八、如何利用会话显示每个客户的会见次数
*************************************************************************************
由于客户的会见次数是一个整型的变量,但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); // 利用新建设的工具包围本来的老的工具
*************************************************************************************