有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JSP页面在不合适的地方创建JSESSIONID cookie

当我在没有HttpSession的情况下访问我的页面时,index.jsp仍然创建JSESSIONID-cookie。更糟糕的是,在负责注销用户的servlet中,session.invalidate()似乎无法解决问题

index.jsp看起来像这样:

<%@page import="javax.servlet.http.Cookie"%>
<%@page contentType="text/html" pageEncoding="utf-8"%>
<%@page session="true"%>

<%!
    void removeJSessionIdCookie(HttpServletResponse response) {
        Cookie cookie = new Cookie("JESSIONID", "");
        cookie.setValue(null);
        cookie.setMaxAge(0);
        cookie.setPath("/");
        response.addCookie(cookie);
    }
%>


<%
    if (session != null) {
        out.print("Session not null.");
        if (session.getAttribute(Config.CURRENT_USER_ATTRIBUTE) != null) {
            out.print("have user"); 
            request.getRequestDispatcher("app.jsp").forward(request, response);
            return;
        } else {
            out.println("no user here");
            session.invalidate();
            removeJSessionIdCookie(response);
        }
    }
%>
<html>...</html>

共 (1) 个答案

  1. # 1 楼答案

    如果在<%@page%>指令中有session="true",那么如果调用客户端没有会话cookie,即还没有会话,那么JSP框架代码总是创建一个新会话

    您需要将session="false"放入page指令;这会使框架停止为您创建会话