接觸jspo已經(jīng)很久了,但是還真沒(méi)有想過(guò)這個(gè)問(wèn)題,當時(shí)也就沒(méi)有找到一個(gè)滿(mǎn)意的答案給人家。
當時(shí),我提到一個(gè)方法,就是實(shí)現HttpSessionListener接口,然后在sessionDestroyed()方法中執行一些操作,表示session要過(guò)期了,因為這個(gè)方法是session.invalidate()之前監聽(tīng)器調用的方法。這個(gè)判斷的方法顯然不能讓人滿(mǎn)意。
我當時(shí)問(wèn)了些人,但是也沒(méi)有得到一個(gè)準確的答案。
正好偶然間看到,request.getSeesion(boolean)方法,一下子讓我恍然大悟。這個(gè)方法里面傳了一個(gè)boolean值,這個(gè)值如果是true,那么如果當前的request的session不可用,那么就創(chuàng )建新的會(huì )話(huà),如果存在就返回當前的會(huì )話(huà)。如果參數是false,那么在request的當前會(huì )話(huà)不存在的時(shí)候就返回null。
這樣我們就可以很容易的聯(lián)想到這個(gè)所謂的request的當前會(huì )話(huà)是否存在和session過(guò)期的聯(lián)系,所以我們就可以“近似地”認為session不存在就是session過(guò)期了,那么我們就可以很容易地判斷session是否過(guò)期了。方法如下:
if(request.getSession(false)==null)
System.out.println("Session has been invalidated!");
else
System.out.println("Session is active!");
可能大家注意到我上面有一個(gè)“近似地”字眼,也就是說(shuō)存在特別情況。
這個(gè)特殊情況就是第一次請求還沒(méi)有創(chuàng )建會(huì )話(huà)的時(shí)候,那么用這個(gè)方法返回的仍然是null,原因我想大家應該是顯然的。
聯(lián)系客服