继上篇博文进行改进,上篇博文只是利用标记传递值来防止未登录用户绕过登陆页,尽管可以使用,但是有些影响了用户的使用连贯性,需要多次登陆。
今天采用另一种更好的办法达到了过滤器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.的函数发挥了一些很方便的作用,有必要再好好了解一下。