会话管理(一)-Cookie

实验
Cookie一个常见的应用,就是实现用户自动登录功能。在用户登录窗口,应该经常看到有个自动登录的选项,登录时若有选取该选项,下次再登录该网站时,就不用再输入名称密码,可以直接登录。
原理:当用户访问index.do时,会先取得所有的Cookie,然后一个一个检查是否有Cookie存储名称user且值为zhangsan。
如果有,则表示先前用户登录时,曾经选取“自动登录”选项,因此直接转发至user.view。
如果没有,则表示用户是初次访问,或者先前没有选取"自动登录"选项,此时转到login.html。login.html填写信息发送给login.do进行注册,login.do注册成功后转发到user.view。
流程:
在这里插入图片描述
保存会话数据的两种主要技术:
Cookie
Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。
Session
Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。
src下创建controller包,包下包含Login.java和Index.java
再次创建view包,包下创建User.java

Login.java:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String user = request.getParameter("user");
		String passwd = request.getParameter("passwd");
		if("zhangsan".equals(user) && "123456".equals(passwd)) {  //如果用户名密码正确
			String login = request.getParameter("login");
			if("auto".equals(login)) {                            //如果选择了自动登陆,要
				Cookie cookie = new Cookie("user","zhangsan");
				cookie.setMaxAge(7 * 24 * 60 * 60);
				response.addCookie(cookie);
			}
			request.setAttribute("user", user);
			request.getRequestDispatcher("user.view")
				.forward(request, response);
		}else {                                                  //否则(用户名密码错误)
			response.sendRedirect("login.html");
		}
	}

Index.java:

protected void processRequest(HttpServletRequest request,
			HttpServletResponse response) 
					throws ServletException,IOException{
		Cookie[] cookies = request.getCookies();
		if(cookies != null) {
			for(Cookie cookie : cookies) {
				String name = cookie.getName();
				String value = cookie.getValue();
				if("user".equals(name) && "zhangsan".equals(value)) {
					request.setAttribute(name, value);
					request.getRequestDispatcher("/user.view").forward(request, response);
					return;
				}
			}
		}
		response.sendRedirect("login.html");
	}

User.java:

public class User extends HttpServlet {
	
	protected void processRequest(HttpServletRequest request,
			HttpServletResponse response) 
					throws ServletException,IOException{
		response.setContentType("text/html;charset=UTF-8");
		if(request.getAttribute("user") == null) {
			response.sendRedirect("login.html");
		}
		
		PrintWriter out = response.getWriter();
		out.println("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01" +
                " Transitional//EN'>");
		out.println("<html>");
		out.println("<head>");
		out.println("<title>Servlet User</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<h1>"
            + request.getAttribute("user") + "已登录</h1>");
		out.println("</body>");
		out.println("</html>");
		out.close();
	}
	

login.html:

<form action="login.do" method="post">
        名称:<input type="text" name="user"><br>
        密码:<input type="password" name="passwd"><br>
        自动登录:<input type="checkbox" name="login" value="auto"><br>
        <input type="submit" value="发送">
     </form>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值