我有一个 cookie,myCookie
,它包含一个散列值。此 cookie 设置为一年后过期,路径为“/”。我需要用新的散列值更新这个 cookie。加载 JSP 脚本后,我会像这样检索 cookie:
Cookie[] cookies = request.getCookies();
Cookie myCookie = null;
for (int i = 0; i < cookies.length; i += 1) {
if (cookies[i].getName().equals("myCookie")) {
myCookie = cookies[i];
break;
}
}
确定需要更新 cookie 的值后,我执行以下操作来更新它:
myCookie.setValue("my new value");
response.addCookie(myCookie);
检查结果,我现在有两个 myCookie
实例:具有正确到期日期和路径的原始版本,以及旧的、无效的值;以及一个名为“myCookie”的新 cookie,它在 session 结束时过期,具有正确的值和 JSP 文档的路径。
如果我这样做:
myCookie.setValue("my new value");
myCookie.setPath(myCookie.getPath());
myCookie.setMaxAge(myCookie.getMaxAge());
response.addCookies(myCookie);
同样的事情发生了。我得到两个名称相同但属性不同的 cookie。
Cookie 对象是否不保留检索时的属性?我如何更新这个 cookie?
注意:我不想修改路径或到期日期。我只想更新已经设置的 cookie 的值。
最佳答案
根据 RFC 2965 的第 3.3.4 节,用户代理不会在发送到服务器的 cookie header 中包含过期信息。因此,无法在更新现有 cookie 值的同时保留最初仅根据与 cookie 关联的信息设置的到期日期。
所以这个问题的答案是:你不能那样做。
关于java - 如何更新 JSP 中的现有 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5093250/