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