1
我在Servlet中正確設置(持久/跨瀏覽器會話)cookie的數據並在過濾器中讀取數據時遇到問題。使用Servlet處理Cookie
了Servlet的代碼(在登錄時間運行)是:
String encodedValue = new String(Base64
.encodeBase64(req.getParameter("account").getBytes()));
Cookie cookie = new Cookie("projectAuthenticationCookie", encodedValue);
cookie.setMaxAge(24*60*60);
cookie.setPath("/");
res.addCookie(cookie);
這將得到響應裏面的餅乾,但是當我我用下面的代碼過濾器中閱讀:
Cookie authenticationCookie = null;
Cookie[] cookies = ((HttpServletRequest) request).getCookies();
for (Cookie cookie : cookies){
if ("projectAuthenticationCookie".equals(cookie.getName())) {
authenticationCookie = cookie;
}
}
我只獲得我設置的值,其他所有的字段都是空的,空的或不同的。例如最大年齡總是返回-1,因此cookie將永遠不會持續。
我試圖設置過期頭:
res.setDateHeader("Expires", System.currentTimeMillis() + 24*60*60*1000);
,因爲我讀,如果沒有一個有效的到期頭會話將反正超時(糾正我,如果我錯了),但這並沒有幫助...
一個問題我想的是,我在本地主機上運行(嘗試設置cookie.setDomain(「localhost」的),但也沒有運氣)。我的網絡服務器/ serclet容器是Jetty 7,但我認爲這不相關...
任何提示?
爲什麼你在過濾器中需要這些信息?如果maxage已過期,那麼客戶端將不會發回cookie。你只需要檢查服務器是否存在,而不需要知道它是否仍然有效。 – BalusC