我的博客之Session完成用户登录与登出

由于http是无状态协议,我们的客户端不会和服务器一直保持连接状态。也就是说,当我们访问一个网站的时候,这个网站不会记录我们的访问这个网站的信息,比如当我们登录的时候,如果不采取相关措施来记录当前的登录者,如果下一次用户再次访问的时候,那么之前访问的状态荡然无存,又得重新登录才可以使用。

我们可以在用户登录之后,设置一个与该用户相关的session,保存这个用户的相关信息。我们还可以设定这个session的生存时间,当一个过了这个时间,用户再无访问的时候,我们这个session可以自动消除,如果这时用户再次访问的话,有得重新登陆。这样我们通过在服务器端保存一个session,来维持与用户的持续性交互,提高了用户访问体验,也该服务器处理与用户相关的操作提供了便利。

下面是我们的博客系统使用session完成登录与登出的例子。

这是登录的表单:

	<form id="formLogin" onsubmit="return checkselect(this)" method="post" 
		action="<%=URL%>/LoginAction.action">
			<h3>欢迎登录MyBlog!</h3>
			<table id="tableLogin">
			<tr>
				<td>
					<p class="pLogin">用户名:</p>
				</td>
				<td>	
						<input name="name" type="text"/>
						<font color="#FF0000">*</font>
					
				</td>
			</tr>
			<tr>
				<td>
					<p class="pLogin">密码:</p>
				</td>
				<td>
						<input name="password" type="password"/>
						<font color="#FF0000">*</font>
				</td>
			</tr>
			<tr>
				<td></td>
				<td>
				    <input value="登录" type="submit"/>&nbsp;
					<input value="重置" type="reset"/>
				</td>
			</tr>
			<tr>
				<td></td>
				<td>
				    <a href="<%=URL%>/admin/Register.jsp">注册新账号</a>
				</td>
			</tr>
			
			</table>
		</form>

  当我们登录信息提交后,将由LoginAction处理我们的登录,代码如下:

public String execute(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.URL = GLOBALS.getPath(request);
		String url = "error.jsp";
		// 获取页面输入元素,用户民及密码
		String user_name = request.getParameter("name");
		String user_password = request.getParameter("password");
		// 控制台输出
		System.out.println("用户名" + user_name);
		System.out.println("用户密码:" + user_password);
		//loginDao的Login放法对用户名进行验证,查询数据库里面是否有相对应的
		//用户名、密码。
		MasterBean masterBean = loginDao.Login(user_name, user_password);

		// 回应页面请求,在网页中响应,通过out可以直接在这里写html的代码
		response.setCharacterEncoding("utf-8");
		PrintWriter out = response.getWriter();

		
		if (masterBean != null) {
			// 若用户密码正确,查询结果masterBean不应该是null。
			// 校验成功后进入到AdminIndex.jsp显示在页面上
			// 创建一个session
			HttpSession session=request.getSession();
			// setAttribute方法在session中设置用户信息
			session.setAttribute("masterBean", masterBean);
			System.out.println("登录成功!!!");
			System.out.println("用户的masterID:"+masterBean.getId());
			url = "/admin/AdminIndex.jsp";
			return url;

		} else {
			out.write("<html>");
			out.write("<p>登录失败</p>");
			out.write("</html>");
		}

		return url;
	}

  等我们点击退出登录之后,将有LogoutAction处理我们的退出登录请求,代码如下:

	public String execute(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// request.getSession(ture)等同于 HttpServletRequest.getSession():
		// 若存了会话(session)则返回该会话,否则新建一个会话(session)。
		// request.getSession(false):若存在会话(session)则返回该会话,否则返回NULL
		// 所以这里我们用request.getSession(false)
		
		// 获取session
		HttpSession session = request.getSession(false);
		if (session != null) {
		// 如果有session,则把用户信息从session里面除掉。
				session.removeAttribute("masterBean");
		}
		String url = "/admin/Login.jsp";
		return url;
	}

 

 

 

猜你喜欢

转载自season-jy.iteye.com/blog/2280693
今日推荐