【问题标题】:Can't set a cookie with JSP无法使用 JSP 设置 cookie
【发布时间】:2013-09-30 23:11:02
【问题描述】:

无法通过 JSP 设置 cookie。但是 JavaScript 效果很好。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
...//imports and taglibs
<%@ page import="javax.servlet.http.Cookie" %>
<%
    Cookie cookie = new Cookie("testJSP", "testJSP");
    cookie.setMaxAge(365*24*60*60);
    response.addCookie(cookie);
%>
<div ...
   <span><%=request.getCookies()[0].getName() + " " + request.getCookies()[1].getName()%></span>

我将获得一个 JSESSIOID 和一个我通过 JS 设置的 cookie 的名称“test”,但如果我尝试添加

request.getCookies()[2].getName()

我将收到“HTTP 状态 500 - 在第 18 行处理 JSP 页面 /WEB-INF/jsp/issueGrid.jsp 时发生异常” 同样在 Firebug 中,我看不到我从 JSP 设置的 cookie。 你能帮助我吗?我的问题在哪里? 谢谢!

【问题讨论】:

标签: java jsp cookies


【解决方案1】:

在执行response.addCookie(cookie); 时,您实际上是在将 cookie 添加到当前的 HTTP 响应中。

要检查定义的 cookie,请尽量避免使用文字索引,并更喜欢循环遍历 cookie 列表(或者更好地使用 jstl c:foreach:

<% for (int i = 0; i < (request.getCookies() != null ? request.getCookies().length : 0); i++) { %>
    <li>
        <%= request.getCookies()[i].getName() + "=" + request.getCookies()[i].getValue()%>
    </li>
<% } %>

顺便说一句,如果您尝试访问添加到同一有效负载上的响应的 cookie(您的索引 2),您将无法获得它,因此会出现 NullPointerException,因此会出现 HTTP 500

【讨论】:

  • 好的。谢谢!但这并不能解决我的问题。这有点不同。我做response.addCookie(cookie); 然后在浏览器中刷新页面,例如我在萤火虫中看不到我的新cookie。为什么它没有设置为response.addCookie(cookie);?我可以在 JSP 中读取 cookie,但无法设置。
  • 您可能必须尝试隔离引发问题的代码。我刚刚用你的代码创建了一个简单的项目,创建了 cookie,我的循环出现了。
  • 在 firebug 的网络标签中,您应该会在响应中看到 Set-Cookie 标头。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-13
  • 2015-04-09
  • 2020-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-28
相关资源
最近更新 更多