java - 是否有一种解决方案可以在重定向响应时在浏览器上保留 cookie?

标签 java http redirect cookies referrer

我正在为网络应用程序构建用户跟踪系统。人们可能来自许多网址。我想知道这些网址来自哪些网址。 我这样设计网址:http://www.example.com/ref/XXXXXXX .

我创建了一个过滤器来处理传入的请求:

String cookieKey = "examplesite.cookie";
String cookieValue = referralIdentifier;
Cookie cookie = new Cookie(cookieKey, cookieValue);
cookie.setMaxAge(60*60*24*365);
((HttpServletResponse) response).addCookie(cookie);

HttpServletResponse resp = (HttpServletResponse)response;
resp.addCookie(cookie);
resp.sendRedirect("/");

执行此代码时,我无法在浏览器中看到设置的 cookie。

如果我将重定向更改为转发,我可以看到 cookie。 我看到这篇博文how to track people with cookie and redirect博主建议使用代码重定向的地方。

所以我更改了代码并将 resp.sendRedirect("/"); 替换为

 resp.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
                        resp.setHeader("Location", "http://www.example.com/");

这里我可以在 Firefox 中看到 cookie,但在 Chrome 中看不到。

重定向后是否有跟踪用户的解决方案?

最佳答案

根据 http://www.javamex.com/tutorials/servlets/cookies_api.shtml默认情况下,cookie 对“请求设置 cookie 的父级的子路径”可见。

这可能是您的问题。要使 cookie 在所有路径上可见,您可以使用 cookie.setPath("/") 将路径设置为“/”。

关于java - 是否有一种解决方案可以在重定向响应时在浏览器上保留 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28788736/

相关文章:

java - 强制所有 session 注销

java - 在真实设备上运行应用程序时出现 NoClassDefFoundError,但在模拟器上运行时不会出现 NoClassDefFoundError

http - 不同的 HTTP 主机通过相同的 TCP 连接

java - 应用程序正在等待调试器

没有close()方法的Java中断输入流

mongodb - 在 http 中输出一个 .mp4 文件,从数据库中提取到浏览器

javascript在不重定向的情况下更改get参数

reactjs - 在没有反应路由器的情况下以编程方式重定向到 URL

javascript - 使用 JS 在 URL #fragment 丢失到 301 重定向之前转换它?

java - 使用 isLeaf、isParent 构建二叉树类问题,并且不确定权重