12

我无法检索 cookie maxage 它总是返回 -1

创建cookie:

Cookie securityCookie = new Cookie("sec", "somevalue");
securityCookie.setMaxAge(EXPIRATION_TIME);

检索 cookie:

Cookie[] cookies = request.getCookies();
if (cookies != null) {
    for(int i=0; i<cookies.length; i++) {
        Cookie cookie = cookies[i];
        if ("sec".equals(cookie.getName())){
            int age = cookie.getMaxAge();
        }
    }
}

我总是变老= -1

当我检查 Firefox cookie 过期时,我也看到奇怪的日期。

谢谢

4

4 回答 4

14

当浏览器将 cookie 发送回源服务器时,它不包含任何年龄。因此,您上面的“检索”代码没有收到最大年龄是合乎逻辑的:它不包含在请求中。

当从服务器接收到 cookie 时,浏览器使用 max age 参数来确定 cookie 应该保留多长时间;年龄永远不会传回服务器,过期的 cookie 会被简单地丢弃。处理请求时,如果要更新 cookie 的年龄,请在响应中重新包含 cookie。

另请参阅RFC中的“向源服务器发送 Cookie”部分。

于 2008-10-09T12:32:53.593 回答
1

API 说 -1 意味着直到浏览器运行:

返回 cookie 的最大年龄,以秒为单位,默认 -1 表示 cookie 将持续存在,直到浏览器关闭

EXPIRATION_TIME 常量的值是多少?

于 2008-10-07T09:47:21.807 回答
0

该值可以由浏览器修改。

您创建了一个 cookie 并希望设置一个最大年龄。cookie 被发送到浏览器。浏览器可能会拒绝 cookie 或忽略对其策略而言过长的最大年龄。此修改后的 cookie 将发送回您的应用程序。

检查您的浏览器设置。

于 2008-10-07T11:00:03.017 回答
0

只是为了笑,您可以使用 javascript 从浏览器中检索 cookie 的值吗?

另外,你可以在你的 servlet/jsp 之前放置一个过滤器,以便在 servlet/jsp 设置它之后检查 cookie 的值吗?

于 2008-10-07T15:03:05.070 回答