使用session控制web登录退出


title: 使用session控制web登录退出
date: 2019-06-08 22:29:00
tags: [“Java”, “JSP”]

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

使用

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

获取/逻辑判断

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

移除

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

<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判断

<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

<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,问题终于得到解决。

更多分享,在我的个人博客:https://zhouhangzooo.github.io/
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值