登录之记住用户与自动登录
如题,大家在使用各种网站时,为了更好的用户体验,网站往往会提供这两种功能之一,以便下次登录方便。
今天要讲述的是用java操作cookie来实现这两个功能,网络上也有很多的总结,这里只作为自己知识点的一个记录。其实这两个功能是大同小异的,其核心就是java怎么对cookie进行增加、修改、删除的操作。
1. 创建cookie
1 Cookie cookie = new Cookie(name, value);// 两个参数全是字符串 2 response.addCookie(cookie);
上面的cookie没有生命周期,随着浏览器关闭就消失,生存在浏览器内存里。
1 Cookie cookie = new Cookie(name, value); 2 cookie.setMaxAge(maxAge);// 这里需要一个整型值,单位为秒 3 cookie.setPath("/"); // 设置cookie路径,/代表根路径,该cookie对整个网站都有效,如果不设置路径,只有创建该cookie的路径及其子路径可以访问该cookie 4 response.addCookie(cookie);
上面的cookie声明周期为maxAge。
2. 读取cookie
1 Cookie[] cookies = request.getCookies();
3. 修改cookie
遍历cookie数组,根据name找到相应的cookie对象,修改之,然后放到response中.
4. 删除cookie
1 Cookie cookie = new Cookie(name, null); 2 cookie.setMaxAge(0);// 设置为0,立即删除该cookie 3 response.addCookie(cookie);
cookie的简单操作就介绍完了,我们来建立一个cookie的管理类,把相关的操作封装到一个对象中,这也是面向对象的思想吧,请看代码.
1 /** 2 * 管理cookie 3 * 4 */ 5 public class CookieManager { 6 7 /** 保存cookie的map */ 8 private static Map<String,Cookie> cookieMap = new HashMap<String,Cookie>(); 9 /** 用户名key */ 10 public static final String USERNAME = "username"; 11 /** 密码key */ 12 public static final String PASSWORD = "password"; 13 /** 是否保存的key */ 14 public static final String ISSAVE = "isSave"; 15 16 /** 17 * 设置cookie 18 * @param response 19 * @param name cookie名字 20 * @param value cookie值 21 * @param maxAge cookie生命周期 以秒为单位 22 */ 23 public static void addCookie(HttpServletResponse response, String name, String value, int maxAge) { 24 Cookie cookie = new Cookie(name, value); 25 cookie.setMaxAge(maxAge); 26 response.addCookie(cookie); 27 } 28 29 /** 30 * 根据名字获取cookie 31 * @param name cookie名字 32 * @return 33 */ 34 public static Cookie getCookieByName(String name) { 35 if(cookieMap.containsKey(name)) { 36 Cookie cookie = (Cookie)cookieMap.get(name); 37 return cookie; 38 } else { 39 return null; 40 } 41 } 42 43 /** 44 * 将cookie封装到Map里面 45 * @param request 46 * @return 47 */ 48 public static void readCookieMap(HttpServletRequest request) { 49 cookieMap.clear(); 50 Cookie[] cookies = request.getCookies(); 51 if(cookies != null) { 52 for(Cookie cookie : cookies) { 53 cookieMap.put(cookie.getName(), cookie); 54 } 55 } 56 } 57 58 }
那么接下来就简单了,每次登陆之前,先调用readCookieMap来初始化,如果是自动登录,直接拿这个用户名和密码去登录,如果是记住用户,那么把用户名和密码填写到输入框,当然我这里用户名和密码写入cookie时都没有加密。