【问题标题】:Java Servlet: Session cookie is null for subsequent requestsJava Servlet:后续请求的会话 cookie 为空
【发布时间】:2018-08-21 11:44:53
【问题描述】:

我正在尝试为会话 cookie 设置一个属性,并将该属性用于后续请求(在第一个请求之后)。以下是我的代码。这里我使用check 变量来检查代码的功能。对于第一个请求,它应该给我后续请求的“init”和“original”。但是,我将“init”作为所有请求的输出。这个问题的原因是什么?

    @Override
    protected void doGet(HttpServletRequest reqest, HttpServletResponse response) throws IOException {

    HttpSession ssn = reqest.getSession();
    reqest.getSession(true);
    String check="original";
    if(ssn.getAttribute("currentQuestion")==null){
        check="init";
        ssn.setAttribute("currentQuestion","0");
    }
    response.addHeader("Access-Control-Allow-Origin", "*");
    response.getWriter().println(check);
}

我正在使用以下 AJAX 客户端发送请求

function submitAnswer() {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById("demo").innerHTML = this.responseText;
    }
  };
  xhttp.open("GET", "http://example.com:8080/Simple/hello?username=malintha", true);
  xhttp.send();
}

【问题讨论】:

  • 你如何调用 servlet?您确定要传递会话 cookie?
  • 似乎有些术语混乱。服务器端会话不是“会话 cookie”。
  • @RobbyCornelissen 添加了我的客户端代码
  • 您是从浏览器中发送 AJAX 请求吗?还是来自 NodeJS 之类的?如果您有 JSESSIONID cookie 进入 (docs.oracle.com/javaee/6/api/javax/servlet/http/…),也可能值得检查。
  • @RobbyCornelissen 是的,在浏览器中

标签: java servlets session-cookies


【解决方案1】:

您的代码逻辑很好。但是,我注意到您调用 getSession 两次。这不是必需的。尝试删除第二个 getSession(true) 调用。

另外,请确保您使用外部浏览器,例如 Chrome 或 Firefox,而不是 eclipse 内置的浏览器。

【讨论】:

    猜你喜欢
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 2013-02-14
    • 2015-10-23
    • 2015-12-12
    • 1970-01-01
    • 2021-12-23
    相关资源
    最近更新 更多