Servlet会话问题

时间:2013-08-11 11:06:52

标签: 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.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>

当我启动它时,在登录页面之后,我看到了像

这样的URL
http://localhost:8080/Test/CheckoutPage.jsp;jsessionid=XYZ

当我点击退出按钮时,它会将我转到登录页面。

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

我不确定JSP如何使会话在Logout servlet中失效。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:-1)

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