2013-04-12 139 views
2

我想爲我的iPhone應用程序實現註銷功能,該應用程序在客戶端使用jQuery mobile,JS和服務器端使用java。目前我需要做的是清除cookie並重定向到我的index.html中的#loginpage標記(我只有一個HTML文件,其中有多個標記用於不同的頁面)。我現在正在爲clearCookie做的事情是:如何刪除cookie

Cookie readCookie = null; 
for (Cookie cookie : httpRequest.getCookies()) { 
    if (cookie.getName().equals("CookieForLogin")) { 
     readCookie = cookie; 
     break; 
    } 
} 

readCookie.setMaxAge(0); 
httpResponse.addCookie(readCookie); 

但是這段代碼沒有清除cookie。我已經嘗試過JS方式,即將過期日期設置爲在網上給出的某個以前的日期,但它們不起作用。我也沒有HttpServletResponse的響應方法。如何清除在客戶端設置的cookie以及如何重定向到特定標籤?

+0

你可以試試使用juery.cookie? – JacobChan

+0

使用$ .cookie('CookieForLogin',null)不起作用。 –

+1

不要忘了'session.invalidate()' –

回答

3

Cookie被綁定到特定的路徑。您需要確保在刪除Cookie的過程中設置相同的路徑,就像創建Cookie時一樣。它默認爲URL中當前請求的文件夾(因此只能在同一文件夾或其所有子文件夾中使用)。您最好明確指定路徑,否則將取決於URL中當前請求的文件夾。 Cookie路徑信息就像maxage,即在請求cookie標頭中不可用。

假設你創建的cookie如下,

Cookie cookie = new Cookie("CookieForLogin", cookieForLogin); 
cookie.setPath("/somePath"); 
cookie.setMaxAge(maxAgeInSeconds); 
// ... 
response.addCookie(cookie); 

它需要刪除如下:

Cookie cookie = new Cookie("CookieForLogin", null); 
cookie.setPath("/somePath"); 
cookie.setMaxAge(0); 
// ... 
response.addCookie(cookie); 

/somePath只是示範性的。只要在兩種情況下都相同,您也可以只使用/

注意,這同樣適用於Cookie的SecureHTTP-only標誌。如果您在Cookie創建過程中最初將其設置爲true,那麼在Cookie移除期間您還應將其設置爲true,它們默認爲false

這就是說,我不確定將登錄用戶存儲爲cookie有多麼有用。你基本上也允許最終用戶操縱它的價值。相反,只需將登錄用戶存儲爲會話屬性,並在退出時調用session.invalidate()

+0

我的理解是將maxage設置爲0不起作用。我們必須設置其他參數,如內容,路徑等..謝謝@BalusC –

0

getMaxAge

公衆詮釋getMaxAge() 獲取此cookie秒的最長期限。 默認情況下,返回-1,表示cookie將一直持續到瀏覽器關閉。

返回: 一個整數,指定以秒爲單位的cookie的最大年齡;如果爲負,意味着該Cookie持續到瀏覽器關閉 另請參見: setMaxAge(INT)

// Java API文檔

總之你需要設置cookie的年齡:

A negative value means that the cookie is not stored persistently and will be deleted when the Web browser exits. 
A zero value causes the cookie to be deleted. 

Cookie killMyCookie = new Cookie("mycookie", null); 
killMyCookie.setMaxAge(0); 
killMyCookie.setPath("/"); 
response.addCookie(killMyCookie);