今天给大家说一个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,问题终于得到解决。