gpt4 book ai didi

java - 使用 Servlet 处理 Cookie

转载 作者:行者123 更新时间:2023-11-29 07:18:29 24 4
gpt4 key购买 nike

我在 Servlet 中正确设置(持久/跨浏览器 session )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,但是当我使用以下代码在过滤器中读取它时:

    Cookie authenticationCookie = null;
Cookie[] cookies = ((HttpServletRequest) request).getCookies();
for (Cookie cookie : cookies){
if ("projectAuthenticationCookie".equals(cookie.getName())) {
authenticationCookie = cookie;
}
}

我只得到我设置正确的值,所有其他字段要么为空,要么为空或不同。例如,Max age 始终返回 -1,因此 cookie 将永远不会保留。

cookie return values

我尝试设置 expires-header:

    res.setDateHeader("Expires", System.currentTimeMillis() + 24*60*60*1000);

正如我所读到的,如果没有有效的 expires-header, session 无论如何都会超时(如果我错了请纠正我),但这也无济于事......

我正在考虑的一个问题是我在本地主机上运行(尝试设置 cookie.setDomain("localhost") 但也没有成功)。我的网络服务器/serclet 容器是 Jetty 7,但我认为这不相关...

有什么提示吗?

最佳答案

您从请求中获得的 cookie 中不会填充名称和值以外的字段(因此没有意义)。

这些字段旨在通知浏览器有关最大年龄的信息; cookie 的路径等,但浏览器不会将此信息发送回服务器。只有当您创建 cookie 并将其添加到响应中时,才有正确的最大年龄、路径等很重要。使用您的浏览器检查它是否存储了正确的信息,而不是尝试在服务器端查找它。

关于java - 使用 Servlet 处理 Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7333780/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com