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 楼答案
如果在
<%@page%>
指令中有session="true"
,那么如果调用客户端没有会话cookie,即还没有会话,那么JSP框架代码总是创建一个新会话您需要将
session="false"
放入page指令;这会使框架停止为您创建会话