使用session控制web登录退出

今天给大家说一个session的问题,首先是session的使用方法:

使用

<% session().setAttribute(“isLogin”, “true”); %>

获取/逻辑判断

<% session.getAttribute(“isLogin”); %>

移除

<% session.removeAttribute(“isLogin”); %>
我是这样想的,在登录成功之后给session赋值,然后在主页或别的页面获取session做判断,如果session属性的值为空,那么就是未登录,然后跳转到登录页面,下面按照我自己的想法开始写:
首先我在login.jsp中登录之后赋值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<script type="text/javascript">
loginButton = function() {
var id = $("#id").val(); //jqury val()方法返回元素value属性
var password = $("#password").val();

if (id == '') {
$("#info").text("提示:学号不能为空");
} else if (password == '') {
$("#info").text("提示:密码不能为空");
} else {
$.ajax({
type : "POST",
url : "/books/StudentLoginServlet",
data : {
id : id,
password : password
},
dataType : "json",
success : function(data) {
if (data.code == "000000") {
<% session().setAttribute("isLogin", "true"); %>
window.location.href = "home.jsp?id=" + data.data.id;
} else {
$("#info").text(data.message);
}
}
});
}
}
</script>

然后home.jsp判断

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<body>
<%
out.print(session.getAttribute("isLogin"));
if (session.getAttribute("isLogin") == null || request.getParameter("id") == null)
{
response.sendRedirect("login.jsp");
}
String id = request.getParameter("id");
%>
<div style="display: flex">
<h3>
欢迎您:<%=id%></h3>
<form style="margin-left: 30px" action="exitLogin.jsp" method="post">
<button type="submit">退出</button>
</form>
</div>
</body>

最后是退出jsp

1
2
3
4
5
6
7
<body>
<%
//session.setAttribute("isLogin",null);
session.removeAttribute("isLogin");
response.sendRedirect("login.jsp");
%>
</body>

理论上这样写是可以的,但最终出现非常奇怪的问题,就是第一次登录是没有问题的,但home.jsp点击退出回到login.jsp之后,我直接进入home.jsp,按理是不能进入home的,因为我退出移除了session的”isLogin”属性值,但结果是可以进入home.jsp。
这很奇怪,我不知道我存在什么问题,这让我烦恼了半天,我在login.jsp中将session的”isLogin”输出,发现这个session的”isLogin”属性值显示是为null,但点击刷新之后这个session的”isLogin”值为true,然后在home.jsp中发现也是true,为什么会出现这种情况呢?刚开始我猜想是不是没有成功移除,我尝试了session.setAttribute(“isLogin”,null);、session.removeAttribute(“isLogin”);和session.invalidate();

最后我的解决方法是:去除login.jsp中的<% session().setAttribute(“isLogin”, “true”); %>代码,进入StudentLoginServlet中里面写为:request.getSession().setAttribute(“isLogin”, “true”);

这样,点击退出之后,session的”isLogin”为null,再刷新也是null,问题终于得到解决。

文章目录
  1. 1. 今天给大家说一个session的问题,首先是session的使用方法:
    1. 1.0.1. 使用
    2. 1.0.2. 获取/逻辑判断
    3. 1.0.3. 移除
    4. 1.0.4. 最后我的解决方法是:去除login.jsp中的<% session().setAttribute(“isLogin”, “true”); %>代码,进入StudentLoginServlet中里面写为:request.getSession().setAttribute(“isLogin”, “true”);