我有一個Web應用程序運行在舊的已修改Tomcat安裝上。爲了刪除註銷後會話cookie,我有以下代碼:Java Cookie.setMaxAge(0)的行爲是否落實到實施或者是否有規範?
Cookie sessionCookie = new Cookie("session",null);
sessionCookie.setMaxAge(0);
response.addCookie(sessionCookie);
在我的web應用程序,我有一個問題,即隨着到期cookie的部分它返回當前時間:
Set-Cookie: sesssion=null; Expires=Sat, 18-Feb-2012 18:04:52 GMT
問題是隻需要一個客戶端的PC稍微在服務器後面進行發送cookie!
然而,在Tomcat 5.5中,它返回:
Set-Cookie: session=null; Expires=Thu, 01-Jan-1970 00:00:10 GMT
哪個是更期望的行爲。
我的問題是都是正確的,是有關於這個應該怎麼實現的任何官方指南,文件只是規定:
零值會導致刪除cookie。
也許我必須自己添加Set-Cookie:頭以解決此問題?
這很複雜。這是一個專有的服務器,它已經覆蓋了大部分的servlet部分,你根本不能使會話無效,調用這些方法會導致錯誤。該Cookie是會話ID和負載均衡器的令牌。就目前而言,如果客戶端的時鐘錯誤,負載平衡器會拒絕該請求,因爲「null」格式不正確。但是,如果我允許它傳遞原始會話/令牌,那麼該會話現在已被標記爲已註銷,並且不能用於安全性,因此,使用錯誤時鐘的用戶必須重新啓動瀏覽器! – Alan 2012-02-18 18:57:14
@Alan:瀏覽器不應該被重定向到登錄頁面嗎? – 2012-02-18 21:59:58
@SkipHead它將仍然使用舊的會話ID,因爲服務器允許我們無法使無效和創建一個新的會話,服務器生成新的會話ID的唯一方法是,如果沒有會話在Cookie中傳遞 - I繼承了這一點,絕不會將服務器軟件用於任何其他項目。 – Alan 2012-02-18 22:04:26