您的位置:首页 > Web前端 > JavaScript

jsp利用session记录登陆状态,保证用户的使用连贯性,并且防止未登录用户绕过登陆页

2016-03-03 19:17 691 查看
继上篇博文进行改进,上篇博文只是利用标记传递值来防止未登录用户绕过登陆页,尽管可以使用,但是有些影响了用户的使用连贯性,需要多次登陆。

今天采用另一种更好的办法达到了过滤器Filter的效果,并且只有当用户点击退出按钮时或者session周期停止或者用户关闭浏览器时,网站释放用户登录信息。

登陆页较上次未变,验证页check.jsp验证用户登录信息是否正确也未变,在确认flag=1后,将设置session:

request.getSession.setAttribute("usr",name);

值得一提的是,在check.jsp页中设置session后,在其他任何页面都可以通过session.getAttribute("name");来获取name的值;

继续,在设置session之后,

response.sendRedirect("LoginSuccess.jsp");

如上,简单两句代码就设置好了session;

然后转向目标页面:

在目标页面添加

<%

if(session.getAttribute("name")!=null)

{

%>

网页内容……

<%

}

else

{

<script type="text/javascript">

<jsp:forward page="login.jsp"/>

</script>

}

%>

在每个目标页前后加上这些代码,就完成了过滤器Fileter同样的效果。

除此之外还需要在网页内容中添加“退出”按钮来清除session记录的登陆信息:

<a href="logout.jsp"></a>

其中,logout.jsp的内容只需要释放session:

<%

session.invalidate();

%>

<script type="text/javascript">

<jsp:forwatd page="login.jsp"/>

</script>

另外可选的是,可以修改目标页面后面如果session.getAttribute("name")==null;转向的页面,使得页面稍微改善(我认为是,其实重要的还是记录一下定时刷新转页的一行代码),即 将<jsp:forward page="login.jsp">改为<jsp:forward page="error.jsp">

其中error.jsp的内容为:

<html>

<center>

登陆错误,3s后返回登陆页……

</center>

</html>

<%

response.setHeader("refresh","3;URL=login.jsp");

%>

还有一个小知识点,就是可以把.getAttribute("name");获取的对象强制转换为字符串类型,虽然在这里没有用到:

String s=session.getAttribute("name").toString();

好了,核心要点基本上就是这些。以上注意到response.的函数发挥了一些很方便的作用,有必要再好好了解一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: