[英]Managing session cookies in Java
我正在一個Java Web應用程序中工作,該應用程序不應允許用戶在2個不同的選項卡中打開它,而我正在為此使用會話cookie。 在大多數情況下,它似乎都可以正常工作,但是問題是,當瀏覽器退出時,不會清除cookie。 這是我設置Cookie的方法:
String sCookie = "mycookie=true;Path=/;Domain=.mydomain.com;HttpOnly";
if (!response.containsHeader("Set-Cookie")) {
response.setHeader("Set-Cookie", sCookie);
} else {
response.addHeader("Set-Cookie", sCookie);
}
據我了解,如果未指定Expires字段,則應在瀏覽器關閉時刪除Cookie。 這是我驗證Cookie是否存在的方法:
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if ("mycookie".equals(cookie.getName()) && Boolean.valueOf(cookie.getValue())) {//some error}}
這段代碼有什么問題嗎? 意思是,我可以使用response.setHeader
設置cookie,然后使用request.getCookies()
檢查它嗎? 有時我在手動刪除Cookie時遇到問題,然后在重新啟動瀏覽器時問題仍然存在。
這是我手動刪除Cookie的方式(在選項卡關閉時):
String sCookie = "mycookie=;Path=/;Domain=.mydomain.com;HttpOnly";
if (!response.containsHeader("Set-Cookie")) {
response.setHeader("Set-Cookie", sCookie);
} else {
response.addHeader("Set-Cookie", sCookie);
}
提前致謝
UPDATE
這是我創建Cookie的方法:
Cookie c = new Cookie("mycookie","true");
c.setDomain(".mydomain.com");
c.setPath("/");
c.setValue("true");
response.addCookie(c);
這是刪除Cookie的方法:
for (Cookie c : request.getCookies()) {
if ("mycookie".equals(c.getName())) {
c.setMaxAge(0);
c.setValue("");
}
}
但仍然無法正常工作。 實際上,現在我關閉選項卡時未刪除cookie(在我以前的版本中使用“ Set-Cookie”:S可以正常工作)。另一個細節是我沒有在Chrome開發人員的“資源”選項卡中看到cookie。工具
作為一般提示,您最好使用response.addCookie(..)
方法,並可能使用Cookie.setMaxAge(-1)
。
就是說,這應該是默認設置,因此為了理解問題,您應該使用Firebug(或任何瀏覽器開發人員工具)檢查Cookie並檢查其最長期限。 關閉瀏覽器之前和之后。 例如,您可能有一些剩余的cookie。
實際上,您應該以不同的方式設置Cookie:
Cookie myCookie = new Cookie(); // create your cookie
// set path, and other attributes you need
// add the cookie to the response
response.addCookie(myCookie);
然后使Cookie
過期:
myCookie.setMaxAge(0);
另外,為了徹底清潔:
myCookie.setValue("");
myCookie.setPath("/");
因此,您必須獲取請求中的所有cookie,識別您的cookie並使用類似以下內容的方法對其進行清理:
List<Cookie> cookies = request.getCookies();
for (Cookie cookie : cookies) {
// identify your cookie
if (identified) {
cookie.setMaxAge(0);
cookie.setValue("");
cookie.setPath("/");
}
}
如果cookie.getName("Set-Cookie")
與您的Cookie
不匹配,請調試代碼以查看在response.setHeader("Set-Cookie", sCookie);
分配了什么名稱response.setHeader("Set-Cookie", sCookie);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.