上文我们说到了如何设计用户登录界面并从数据库中进行匹配,本篇将会讨论利用session保证网站或系统的安全性。上文虽然做到了可以使用用户密码登录,但是遗留下来两个问题:1)如果使用者知道网页的路径直接绕过登录界面怎么办?2)怎么退出登录保证用户密码的安全性?
为解决上述的问题,首先先来设计几个页面。
一、设计系统的各个页面
一般的管理系统界面通常会有录入、查看、修改、删除的功能。我们也以此设计,新建这个4个界面。这4个界面一般以菜单链接的形式分布在主页上,所以我们一般使用frameset来设计界面。
index.jsp
<frameset rows="20%,*">//分为上下两个界面
<frameset src="top.jsp">
<frameset columns="30,*">//分为左右两个界面
<frameset src="main_left.jsp">
<frameset src="main_right.jsp" nam="main_right">//name可指定框架,与target相互使用
</frameset>
</frameset>
main_left.jsp
<a href="input.jsp" target="main_right">录入信息
<a href="display.jsp" target="main_right">查询信息
<a href="modify.jsp" target="main_right">修改信息
<a href="delete.jsp" target="main_right">删除信息
<a href="exit.jsp" target="main_right">退出
如何我们才能避免用户绕过登录界面直接到这些界面呢,就需要session来保存用户名和密码了。
二、利用session保证网页安全性
还记得上次我们说到验证用户名和密码的varify.jsp,修改该界面:登录成功就跳转主页,并将用户名和密码保存在session中;如果不成功就回到登录页面。
varify.jsp
<jsp:useBean id="user" class="com.test.model.userTable"></jsp:useBean>//id表示useBean的唯一标识,class表示bean的路径
<jsp:useBean id="userservice" class="com.test.service.UserService"></jsp:useBean>
<jsp:setProperty property="*" name="user">//*表示传递的所有参数,name是复制的javaBean
<%//处理逻辑
if(userservice.verify(user)){
session.setAttribute("user",user);//将用户名密码保存在session中
%><jsp:forward page="index.jsp"></jsp:forward>; //成功之后跳转主页
<%}else{
<jsp:forward page="login.jsp"></jsp:forward>;//否则返回登录界面
}
%>
接着我们再写一个isLogin.jsp页面,这个页面是用来判断是否登录的。再每个原本每个需要登录的页面中使用<jsp:include>这个指令包含这个页面,就可以避免用户跳过登录页面访问其他页面的问题了。
isLogin.jsp
<%
UserTable user=(UserTable)session.getAttribute("user");
if(user==null){
%>
<jsp:forword page="login.jsp">
<%
}
%>
然后在每个页面的head部分可以写
<jsp:include page="isLogin.jsp">
即可保证登录安全性问题。
三、退出登录
想要删除保存在session中的用户信息,只要使用removeAttribute()方法即可。
exit.jsp
<%
session.removeAttribute("user");
%>
<jsp:forward page="login.jsp">
小结:主要是利用session来解决网页登录的安全性问题。