使用cookie实现记住用户名功能

1.为什么要实现记住用户名功能
我们在登陆QQ的时候,需要输入QQ账号和密码,因为QQ号比较长,如果每次登陆都要重新输入一遍的话,会显得格外繁杂。因此我们在自己的电脑上登陆QQ的时候,可以勾选记住用户名功能,这个我们就不用每次都输入账号密码了
2.怎样实现记住用户名功能
我们之前学过cookie,cookie简单的说就是缓存,它可以将服务器的数据缓存到客户端,我们就用cookie来实现记住登陆用户名的功能。cookie类中封装了setMaxAge方法,可是设置cookie的缓存时间,我们就是通过控制cookie的缓存时间来实现这个功能。先创建一个cookie对象,将从request对象中解析到的用户名数据存储到cookie中,判断是否勾选记住用户名的复选框,如果未勾选(即得到的remember值为null)我们便设置cookie的有效实现为0,如果勾选则设置有效时间为Integer对象中的常量MAX_VALUE
因为还没有学过JSP,所以先用servlet来实现一个登陆界面,在显示界面之前,我们要先判断在cookie是否存在用户名,如果存在,就优先将保存的用户名显示到界面上
下面是实现代码

package edu.swpu.login;

import java.io.IOException;
import java.io.PrintWriter;

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 {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		String userName ="";
		String checked = "";
		//得到客户端保存的Cookie数据
		Cookie[] cookies = request.getCookies();
		for (int i = 0; cookies != null && i < cookies.length; i++) {
			if("userName".equals(cookies[i].getName())){
				userName = cookies[i].getValue();
				checked = "checked='checked'";
			}
		}
		
		out.write("<form action='"+request.getContextPath()+"/servlet/doLogin' method='post'>");
		out.write("用户名:<input type='text' name='userName' value='"+userName+"'/><br/>");
		out.write("密码:<input type='password' name='pwd'/><br/>");
		out.write("<input type='checkbox' name='remember' "+checked+" />记住用户名<br/>");
		out.write("<input type='submit' value='登录'/><br/>");
		out.write("</form>");
		
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}
package edu.swpu.login;

import java.io.IOException;
import java.io.PrintWriter;

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 DoLoginServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		//获取表单数据
		String userName = request.getParameter("userName");
		String pwd = request.getParameter("pwd");
		String remember = request.getParameter("remember");
		
		Cookie ck = new Cookie("userName", userName);
		ck.setPath("/");
		//处理业务逻辑
		//分发转向
		if("tom".equals(userName)&&"123".equals(pwd)){
			if(remember != null){
				ck.setMaxAge(Integer.MAX_VALUE); //设置Cookie的有效保存时间
			}else{
				ck.setMaxAge(0);                 //删除Cookie
			}
			response.addCookie(ck);              //将Cookie写回到客户端
			out.write("登录成功!");
		}else{
			out.write("登录失败!");
			//设置2秒跳到重新登录
			response.setHeader("refresh", "2;url="+request.getContextPath()+"/servlet/login");
		}
		
		
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}
发布了47 篇原创文章 · 获赞 102 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/MarcoAsensio/article/details/99203285