利用cookie和session实现七天免登陆
经常看到登录网站的时候回出现 记住我 等这一类的选项,可以让你下一次登录的时候无需登录。下面我们用代码实现一下。
简单的前端页面 login.jsp:我用的是jsp
<h3>登录访问资源</h3>
<h3>${msg}</h3>
<hr>
<form action="source" method="post">
用户名:<input type="text" name="username"><br>
密码:<input type="text" name="password"><br>
<input type="checkbox" name="remember" value="1">是否七天免登陆<br>
<input type="submit" value="提交">
</form>
后台代码:这里我用的是原生的servlet
@WebServlet("/source")
public class LoginSourceServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
String password = req.getParameter("password");
String remember = req.getParameter("remember");
if(!username.equals("yang" || !password.equals("123"))){
req.setAttribute("msg","用户名或者密码错误");
req.getRequestDispatcher("/login.jsp").forward(req,resp);
return;
}
if(remember.equals("1")){
Cookie cookie = new Cookie("JSEESIONID", req.getSession().getId());
cookie.setMaxAge(60*60*24*7);
req.getSession().setMaxInactiveInterval(60*60*24*7);
resp.addCookie(cookie);
}else {
/*设置session的生命周期*/
req.getSession().setMaxInactiveInterval(1800);
/*设置cookie的jsessionid的值和生命周期*/
Cookie c = new Cookie("JSESSIONID", req.getSession().getId());
c.setMaxAge(-1);
/*将cookie放入到响应对象中*/
resp.addCookie(c);
}
req.getSession().setAttribute("username",username);
req.getRequestDispatcher("/success.jsp").forward(req,resp);
}
}
登录成功后的页面 success.jsp:
<body>
${username},欢迎您!
</body>
要点总结:
其实最重要的是下面这一段代码:
Cookie cookie= new Cookie("JSEESIONID", req.getSession().getId());
cookie.setMaxAge(60*60*24*7);
req.getSession().setMaxInactiveInterval(60*60*24*7);
resp.addCookie(cookie);
思路:我们先创建一个cookie对象,然后将其JSEESIONID赋值为req.getSession().getId(),JSEESIONID就相当于一个身份牌,后我们将这个身份牌设置七天的有效期,之后再给session设置七天的有效期,这样客户端的cookie中的jsessionid和服务端的session有效期都是7天,之后每次请求cookie都会带着jsessionid来和session中的jsessionid对比,就可以简单的实现七天免登陆了。
这里注意一下,如果下一次登陆又点了七天免登陆,那么就会重新计算天数