Servlets Servlet会话问题

Servlets Servlet会话问题,servlets,Servlets,我面临着servlet URL重写的问题 我的LogoutServlet doPost()方法代码是: //invalidate the session if exists HttpSession session = request.getSession(false); if(session != null) session.invalidate(); response.sendRedirect("login.html"); 我的Checkout

我面临着servlet URL重写的问题

我的LogoutServlet doPost()方法代码是:

//invalidate the session if exists
        HttpSession session = request.getSession(false);
        if(session != null) session.invalidate();
        response.sendRedirect("login.html");
我的Checkout.jsp代码是:

<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Page</title>
</head>
<body>
<%@ page session="false" %>
<%
if(request.getSession(false) == null){
    response.sendRedirect("login.html");
}
%>
<h3>Hi there, do the checkout.</h3>
<br>
<form action="LogoutServlet" method="post">
<input type="submit" value="Logout" >
</form>
</body>
</html>
当我单击注销按钮时,它会将我转发到登录页面

问题是,如果我使用jsessionid提供上述URL,那么它不会将我转发到登录页面并显示JSP数据


我不确定JSP是如何在注销servlet中使会话失效的。

中的invalidate方法验证该方法。它不会将其设置为null。您可以检查会话中存储的任何属性,以检查它是否为空。

默认情况下,只要执行JSP,就会创建会话。您不应该使用会话的存在来确定用户是否登录。相反,您应该在会话中存储一些标志或对象,以便在成功登录后将其标记为经过身份验证的会话


如果标志为或对象在会话中(或为true),则对用户进行身份验证。否则,它就不是了。

所以,如果我尝试使用JSSessionID直接访问JSP,我如何确保它会转发到登录页面?正如我所说的,您必须在会话中存储一些属性。因此,在您检查该属性时,它将为null,如果为null,您可以将用户转发到登录页面。好的,我更改了登录servlet代码以添加名为“user”的会话属性,并将Checkout.jsp条件更改为:if(request.getSession(false).getAttribute(“user”)==null){response.sendRedirect(“login.html”);}但即使这样也不行。我用JSSessionID复制了URL,然后单击注销按钮,这将使会话无效。然后我将URL粘贴到浏览器中,得到的是JSP页面,而不是login.html页面。当你谈论URL重写时,你是说你停用了Cookie吗?LogoutServlet中是否存在会话?是的,我已停用cookie,进行了一些调试,并在LogoutServlet请求中发现该会话。getSession(false)返回NULL。那么如何获取会话并使其无效呢?这意味着指向servlet的链接没有正确编码,并且不包含jsessionid。否则,由于您禁用了cookie,服务器无法知道将请求附加到哪个会话。代码应该是
。JSTL
标记正确地编码了URL。问题是表单中的操作没有编码,因此LogoutServlet无法获取会话信息。
http://localhost:8080/Test/CheckoutPage.jsp;jsessionid=XYZ