利用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 {@Overrideprotected 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对比,就可以简单的实现七天免登陆了。
这里注意一下,如果下一次登陆又点了七天免登陆,那么就会重新计算天数