【问题标题】:Undesired session creation不需要的会话创建
【发布时间】:2012-02-28 11:55:48
【问题描述】:

我有两个 JSP 页面:Login.jspMain.jsp

对于 url 模式 /,我有一个 servlet 可以这样做:

HttpSession session = request.getSession(false);
if (session == null) {
    response.sendRedirect("Login.jsp");
} else {
    response.sendRedirect("Home.jsp");
}

这两个 JSP 页面现在是空的。

当我在浏览器中浏览 localhost:8080/appname/ 时,它会按预期路由到 Login.jsp。但是当我第二次尝试浏览它时,它会路由到Home.jsp

当我尝试调试时,session 不为空,我可以在我的 chrome 浏览器中找到带有JSESSIONID 的 cookie。

我不做getSession() 其他任何地方。

谁能解释一下这里发生了什么?

谢谢。

【问题讨论】:

    标签: java jsp session servlets session-cookies


    【解决方案1】:

    不仅是jsp,服务器上的任何请求都会启动一个会话。所以发生的情况是第一次你没有得到任何会话,但下一次你得到的是在之前的请求中创建的会话。

    你可以做的是: a) 设置会话的某些属性,而不是检查会话,检查仅在用户登录后才设置的属性。 b)您可以尝试每次都使会话无效。还要确保即使您在验证用户时使会话无效,然后生成会话,然后设置会话的属性。

    【讨论】:

    • >>服务器上的任何请求都会启动一个会话
    • 除非您编写代码,否则 Servlet 不会创建会话。
    • 嗯……我的错……谢谢你的信息。我只是混淆了两件事。我将它与会话固定概念混淆了,现在当我意识到时,我开始知道这不是因为当我们访问服务器时,而是当我们调用 getSession() 或 getSession(true) 或者我们打开一个 jsp 时,会话开始。对此表示歉意和感谢。
    【解决方案2】:

    默认情况下,JSP 创建一个会话。如果您不想要会话,请添加

    <%@ page session="false" %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-29
      • 1970-01-01
      • 1970-01-01
      • 2016-07-07
      • 2019-06-08
      • 1970-01-01
      • 1970-01-01
      • 2021-01-30
      相关资源
      最近更新 更多