2015-05-09 58 views
0

我想在登錄時在我的響應中設置cookie,然後在每個請求中讀取它。 爲此,我已經在登錄時添加餅乾這樣的:添加和讀取Cookie

Cookie cookieClientId = new Cookie("id", token.getTkn()); 
    cookieClientId.setMaxAge(24*60*60); 
    response.addCookie(cookieClientId); 

當要求來我檢查日的cookie存在或不喜歡這樣的:

cookies = ((HttpServletRequest) request).getCookies(); 
    cookieId = null; 
    if (cookies != null) { 
       for (Cookie ck : cookies) { 
       System.out.println("ck--------------- "+ck.getName()); 
        if (ck.getName().toString().equals("id")) { 
          System.out.println("id cookie equal"); 
          cookieId = ck.getValue(); 
          System.out.println("cookie id " + cookieId); 
          System.out.println(cookieId.equals(authToken)); 
          if (cookieId.equals(authToken)) { 
           isSecretAndKeyValid = true; 
          } 
         }; 
        } 

但我面臨的問題是我只在第一次請求中獲取cookie後才能發送請求。並在此之後,在每個請求我不罰款任何cookie與'id',這是我設定的時間。

我試圖搜索cookie添加,檢索方法,我發現這隻在幾乎每一個地方。

+0

當你設置cookie時。在登錄之前還是之後? –

+0

認證後的身份驗證方法。 – Anita

+0

您是否檢查過cookie是否在瀏覽器(開發工具)中設置?你在哪裏打電話給你的代碼來搜索cookie? – mrak

回答

1

默認情況下,當你發送一個cookie到瀏覽器,瀏覽器會將該cookie返回給發送該cookie的目錄中的所有servlet和JSP以及該目錄的所有子目錄。要使cookie可用於整個應用程序,可以將路徑設置爲「/」。 (引自Murach的Servlets和JSP,第2版)

Cookie cookieClientId = new Cookie("id", token.getTkn()); 
cookieClientId.setMaxAge(24*60*60); 
cookieClientId.setPath("/"); 
response.addCookie(cookieClientId); 
+0

是的。而且很不幸的是,默認路徑沒有設置爲'「/」'* * – ZhongYu

+0

它工作正常。謝謝 – Anita

0

每個HTTP請求時,cookie是分離,你必須cookie數據存儲在您的客戶端,然後在每個請求,您設置Cookie在這樣的:

HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 

    for (HttpCookie cookie : cookieManager.getCookieStore().getCookies()) { 

     cookieString += cookie.toString();   
    } 

    connection.setRequestProperty("Cookie",cookieString);