美文网首页
Cookie之客户端十天免登录

Cookie之客户端十天免登录

作者: 让你变好的过程从来都不会很舒服 | 来源:发表于2021-09-23 08:50 被阅读0次

    需求

    实现十天内免登陆的功能,当用户成功登陆后,十天内可以自动登录。用户名和密码直接写在代码中即可。

    思路

    用户登录成功之后将用户名和密码放到cookie中,当用户下次访问服务器时获取cookie中的用户名和密码与正确的用户名和密码做匹配,如果一致则直接登录成功。

    解决

    第一次登录时向浏览器响应表单数据,LoginServlet

    package com.monkey1024.servlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * 用户登录
     */
    public class LoginServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            request.setCharacterEncoding("UTF-8");
    
            String userName = "";
            String password = "";
            //得到客户端保存的Cookie数据
            Cookie[] cookies = request.getCookies();
            for (int i = 0;cookies!=null && i < cookies.length; i++) {
                if("userName".equals(cookies[i].getName())){
                    userName = cookies[i].getValue();
                }
                if("password".equals(cookies[i].getName())){
                    password = cookies[i].getValue();
                }
            }
    
            //与cookie中的用户名和密码做匹配
            if("admin".equals(userName) && "123456".equals(password)){
                out.write("登录成功!");
            }else{
                out.write("<form action='/servlet/doLogin' method='post'>");
                out.write("用户名:<input type='text' name='userName' /><br/>");
                out.write("密码:<input type='password' name='password'/><br/>");
                out.write("<input type='checkbox' name='remember' />十天免登陆<br/>");
                out.write("<input type='submit' value='登录'/><br/>");
                out.write("</form>");
    
            }
    
    
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
    }
    

    登录成功后将用户名和密码放入cookie中:

    package com.monkey1024.servlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * 登录
     */
    public class DoLoginServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            request.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            //获取表单数据
            String userName = request.getParameter("userName");
            String password = request.getParameter("password");
            String remember = request.getParameter("remember");
    
            Cookie cookie1 = new Cookie("userName", userName);
            Cookie cookie2 = new Cookie("password", password);
            cookie1.setPath("/");
            cookie2.setPath("/");
            if("admin".equals(userName)&&"123456".equals(password)){
                if(remember!=null){
                    cookie1.setMaxAge(60 * 60 * 240);//设置Cookie的有效保存时间为十天
                    cookie2.setMaxAge(60 * 60 * 240);
                    response.addCookie(cookie1);//将Cookie写回到客户端
                    response.addCookie(cookie2);
                }
                out.write("登录成功!");
            }else{
                out.write("登录失败!");
                //设置2秒跳到重新登录
                response.setHeader("refresh", "2;url=/servlet/login");
            }
    
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
    }
    

    相关文章

      网友评论

          本文标题:Cookie之客户端十天免登录

          本文链接:https://www.haomeiwen.com/subject/sghmhltx.html