前端
<div class="submit_btn">
<button type="button" id="btn_sub">登录</button>
<div class="auto_login">
<input type="checkbox" name="remember" value="remember" class="checkbox">
<span>自动登录</span>
</div>
</div>
Servlet
//在登录成功时,判断选中状态
String remember = request.getParameter("remember");
if("remember".equals(remember)){//如果选中了自动登录
String uri = request.getContextPath() + "/";//存储路径
int expiry = 60*60*24*15;//存储时间
Cookie c = new Cookie("uname",user.getUsername());//存储内容
c.setPath(uri);
c.setMaxAge(expiry);
response.addCookie(c);//添加到浏览器的Cookie
c = new Cookie("upwd", user.getPassword());
c.setPath(uri);
c.setMaxAge(expiry);
response.addCookie(c);
}
判断完选中状态后,将登录查询的信息保存到session:session.setAttribute("user",u);
过滤器Filter
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebFilter("/*")
public class AutoLoginFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest)req;
//1. 未进入登录状态-session无标志位
//如果user的session为空说明未登录
HttpSession session = request.getSession();
boolean flag1 = session.getAttribute("user") == null;
//2. Cookie有账号|密码
String uname = null;
String upwd = null;
Cookie[] cookies = request.getCookies();//获取cookie
if(cookies!=null){//如果获取到了
boolean flag2 = false;
for(Cookie c : cookies){//遍历
//将登录时保存的用户名和密码拿出来,并将flag2设置为true
if(c.getName().equals("uname")){
uname = c.getValue();
}else if(c.getName().equals("upwd")){
upwd = c.getValue();
}
if(uname!=null && upwd!=null){
flag2 = true;
break;
}
}
//如果没有登录flag1=true且在cookie中找到了账号密码,就进行登录
if(flag1&&flag2){
UserDao dao = new UserDaoImpl();
User u = dao.findByUsernameAndPassowrd(uname, upwd);
if (u != null){
session.setAttribute("user",u);
}
}
chain.doFilter(req, resp);//放行
}else{
chain.doFilter(req, resp);//放行
}
}
public void init(FilterConfig config) throws ServletException {
}
}
到这里实现了自动登录功能
最后不要忘记,点击退出登录时清空seession的同时也要要清空cookie
//1、销毁session
request.getSession().invalidate();
//2、清空Cookie
String uri = request.getContextPath() + "/";
Cookie c = new Cookie("uname","");
c.setPath(uri);
c.setMaxAge(0);
response.addCookie(c);
c = new Cookie("upwd","");
c.setPath(uri);
c.setMaxAge(0);
response.addCookie(c);
//2、跳转页面
response.sendRedirect(request.getContextPath()+"/login.html");