日期:2014-05-16 浏览次数:20333 次
Cookie ckUsername, ckSessionid; if (autologin.equals("on")) { // 如果用户选择了“两周内自动登录”,则向用户发送两个cookie。 // 一个cookie记录用户名,另一个记录唯一的验证码, // 并将此验证码写入数据库,以备用户返回时查询。(防止伪造cookie) ckUsername = new Cookie("autoLoginUser", user.getUsername()); // user是代表用户的bean ckUsername.setMaxAge(60 * 60 * 24 * 14); //设置Cookie有效期为14天 res.addCookie(ckUsername); sessionid = session.getId(); // 取得当前的session id ckSessionid = new Cookie("sessionid", sessionid); ckSessionid.setMaxAge(60 * 60 * 24 * 14); res.addCookie(ckSessionid); // 在数据库中插入相应记录 userSessionDAO.insertUserSession(user, sessionid); }
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { HttpServletRequest request = (HttpServletRequest) req; HttpSession session = request.getSession(true); String username; String sessionid;
Cookie[] cookies; CookieManager cm = new CookieManager(); //CookieManager是一个自定义的类,用于从Cookie数组中查找并返回指定名称的Cookie值。 boolean isAutoLogin; //如果session中没有user对象,则创建一个。 User user = (User) session.getAttribute("user"); if (user == null) { user = new User(); // 此时user中的username属性为"",表示用户未登录。 } // 如果user对象的username为"",表示用户未登录。则执行自动登录过程。 // 否则不自动登录。 if (user.getUsername().equals("")) { // 检查用户浏览器是否发送了上次登录的用户名和sessionid, // 如果是,则为用户自动登陆。 cookies = request.getCookies(); username = cm.getCookieValue(cookies, "autoLoginUser"); sessionid = cm.getCookieValue(cookies, "sessionid"); isAutoLogin = userSessionDAO.getAutoLoginState(username, sessionid); // 如果在数据库中找到了相应记录,则说明可以自动登录。 if (isAutoLogin) { user.setUsername(username); user.setNickname(DBUtil.getNickName(username)); session.setAttribute("user", user); // 将user bean添加到session中。 } } chain.doFilter(req, resp); }