JavaWeb学习-会话管理系列-5-cookie练习-记住用户名

这篇来做一个cookie的练习场景,就是如何利用cookie来实现登录过程中记住用户名的过程。我们在很多web网站中的登录页面,看到有一个勾选项,叫记住登录。一般记住登录有时间周期,有七天,一个月等。只要用户在浏览器登录一次,第二天或者过几天再次打开登录页面,发现用户名和密码都自动填充了,只需要点击登录。我们来模拟登录页面记住用户名的情况,其实csdn就有这个记住用户名和密码。

需求

实现登录页面记住用户名的需求

JavaWeb学习-会话管理系列-5-cookie练习-记住用户名_第1张图片

上面这个登录就是第二次登录,自动记住用户名,用户名不需要输入。这个场景,在很多公司的内部网络的单点登录经常看得到,记住密码场景不多,很多公司要求员工三个月更换一次密码。

 

1.项目文件结构和代码内容

在src下写两个java类,都实现HttpServlet接口。一个LoginServlet.java实现登录页面和记住用户名的逻辑,第二个DoLogin.java实现判断登录是否成功,而且用户勾选了记住用户名,才做添加cookie处理。

LoginServlet.java内容

package com.anthony.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.setContentType("text/html;charset=UTF-8");
		PrintWriter out = resp.getWriter();
		String userName = "";
		String checked = "";
		//得到客户端保存的cookie数据
		Cookie[] cookies = req.getCookies();
		for (int i = 0; cookies != null && i < cookies.length; i++) {
			if("userName".equals(cookies[i].getName())) { //判断是不是记录用户名的cookie
				userName = cookies[i].getValue();
				checked = "checked='checked'";
			}
		}
		
		//使用PrintWriter对象画出一个登录表单
		out.write("
"); out.write("用户名:
"); out.write("密码:
"); out.write("记住用户名:
"); out.write("
"); out.write("
"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }

DoLogin.java内容

package com.anthony.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DoLogin extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.setContentType("text/html;charset=UTF-8");
		req.setCharacterEncoding("UTF-8");
		PrintWriter out = resp.getWriter();
		//获取表单数据
		String name = req.getParameter("userName");
		String pwd = req.getParameter("pwd");
		String rember = req.getParameter("remenberUser");
		
		Cookie ck = new Cookie("userName", name);
		ck.setPath("/");
		//处理业务逻辑
		//这里不连数据库,就模拟登录成功
		if("Anthony".equals(name) && "123".equals(pwd)) {
			//判断,只有勾选了才记录cookie
			if(rember != null) {
				ck.setMaxAge(60*60*24*7); //记住用户名7天
			}else {
				ck.setMaxAge(0); //删除cookie
			}
			resp.addCookie(ck);
			out.write("登录成功!
"); }else { out.write("登录失败!
"); //设置2秒之后,跳转到登录页面 resp.setHeader("refresh", "2;url="+req.getContextPath()+"/cookie/login"); } //分发转向 } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }

web.xml内容




  
    cookieDemo1
    com.anthony.servlet.CookieDemo1
  
  
    cookieDemo1
    /cookie/demo1
  
  
  
    loginServlet
    com.anthony.servlet.LoginServlet
  
  
    loginServlet
    /cookie/login
  
  
  
    doLogin
    com.anthony.servlet.DoLogin
  
  
    doLogin
    /cookie/doLogin
  

  
    index.html
    index.htm
    index.jsp
    default.html
    default.htm
    default.jsp
  

 

2.测试

打开浏览器,访问LoginServlet.java映射的URLhttp://localhost:8080/Servlet01/cookie/login

第一次登录,没有cookie,需要用户输入Anthony/123这个用户名和密码,因为我们代码中写死了这个判断。

JavaWeb学习-会话管理系列-5-cookie练习-记住用户名_第2张图片

输入代码中判断的用户名和密码,记得勾选记住用户名,点击登录,跳转到第二个servlet,显示登录成功

回到http://localhost:8080/Servlet01/cookie/login

JavaWeb学习-会话管理系列-5-cookie练习-记住用户名_第3张图片

上面代码逻辑是记住用户名一个星期,cookie文件保存本地一个星期后才过期。

通过本篇的记住用户名的练习,我们知道了web页面中类似场景的代码实现过程。如果把上面用户名和密码,通过jdbc去数据库查询,然后判断登录成功,这个就是一个真实生产环境的代码。

 

你可能感兴趣的:(cookie,记住用户名)