我有一个logout.jsp页面,用于使会话无效,以下是其内容:
session.invalidate();
response.sendRedirect("login.jsp");
在我的profile.jsp页面中,我想检查是否设置了会话变量,具体取决于允许用户浏览页面或重定向回登录页面(如果未设置会话变量)
if(request.getSession(false)==null){
response.sendRedirect("login.jsp");
}
但问题是,这不能直接从地址栏打开profile.jsp页面,即使没有用户登录,也会打开而不会重定向到登录页面。进一步打印{{1}我得到输出request.getSession(false)
。我不知道这是什么,并且没有在互联网上发现任何相关信息。那么如何解决这个问题。
编辑:
班级'用户'我使用的对象作为会话变量实现了可序列化,因此可能是我面临的问题的原因。
我不被允许评论所以我在这里提到它。
我使用chrome接受cookie ....此外我在Microsoft Edge中尝试过相同但它仍然是相同的
答案 0 :(得分:0)
我假设您已经创建了用于登录和注销的servlet,然后从相应的servlet可以重定向到该页面: 这可能是您的登录servlet代码:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String email = request.getParameter("email");
String password = request.getParameter("password");
HttpSession session = request.getSession();
session.setAttribute("userName", email);
session.setAttribute("password", password);
getServletContext().getRequestDispatcher("/profile.jsp").forward(request,
response);
}
这可以是你的profile.jsp页面代码来检查会话:
<%
if(!(request.getSession(true).getAttribute("userName").toString()).isEmpty()){
String firstName = (String)request.getAttribute("firstName");
String lastName = (String)request.getAttribute("lastName");
}else{%>
<jsp:forward page = "Login.jsp" />
<% }%>
从注销页面,您只需向logoutservlet发送请求即可。而且,这可以是你的logoutservlet代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
session.invalidate();
out.println("Logout Successful");
out.println("Username : "+session.getAttribute("userName"));
out.println("Password : "+session.getAttribute("password"));
}
之后当我从会话中获取凭据时,我将获得这些字段的空值。