前一段時(shí)間有好幾個(gè)問題,提到怎么判斷session是否過期。
接觸jspo已經(jīng)很久了,但是還真沒有想過這個(gè)問題,當(dāng)時(shí)也就沒有找到一個(gè)滿意的答案給人家。
當(dāng)時(shí),我提到一個(gè)方法,就是實(shí)現(xiàn)HttpSessionListener接口,然后在sessionDestroyed()方法中執(zhí)行一些操作,表示session要過期了,因?yàn)檫@個(gè)方法是session.invalidate()之前監(jiān)聽器調(diào)用的方法。這個(gè)判斷的方法顯然不能讓人滿意。
我當(dāng)時(shí)問了些人,但是也沒有得到一個(gè)準(zhǔn)確的答案。
正好偶然間看到,request.getSeesion(boolean)方法,一下子讓我恍然大悟。這個(gè)方法里面?zhèn)髁艘粋€(gè)boolean值,這個(gè)值如果是true,那么如果當(dāng)前的request的session不可用,那么就創(chuàng)建新的會(huì)話,如果存在就返回當(dāng)前的會(huì)話。如果參數(shù)是false,那么在request的當(dāng)前會(huì)話不存在的時(shí)候就返回null。
這樣我們就可以很容易的聯(lián)想到這個(gè)所謂的request的當(dāng)前會(huì)話是否存在和session過期的聯(lián)系,所以我們就可以“近似地”認(rèn)為session不存在就是session過期了,那么我們就可以很容易地判斷session是否過期了。方法如下:
if(request.getSession(false)==null)
System.out.println("Session has been invalidated!");
else
System.out.println("Session is active!");
可能大家注意到我上面有一個(gè)“近似地”字眼,也就是說存在特別情況。
這個(gè)特殊情況就是第一次請(qǐng)求還沒有創(chuàng)建會(huì)話的時(shí)候,那么用這個(gè)方法返回的仍然是null,原因我想大家應(yīng)該是顯然的。
以上是個(gè)人拙見,希望大家指正。
原文:http://topic.csdn.net/t/20050225/08/3804877.html