Cookie或Token实现网站自动登录

自动登录

概念:
首先保证服务器处于一直开启状态,比如微博,因为只有服务器一值开启用户才能自动登录,服务器一旦崩溃,所有用户无法登录,何况自动登录。
自动登录是登录过一次后,在关闭整个浏览器的情况下(服务器一直开启),再次打开浏览器不需要登录即可访问登录过的网站。

一,使用cookie

实现方法
使用cookie保存首次登录成功后的用户名密码,并设置有效时间,提交保存。

  Cookie cookie1 = new Cookie("username", "kaiqiang");
                Cookie cookie2 = new Cookie("password", "123456");
               //在哪个项目目录下有效
                cookie1.setPath("/Day1014");
                cookie2.setPath("/Day1014");
                //设置有效时长,秒为单位
                cookie1.setMaxAge(60 * 60);
                cookie2.setMaxAge(60 * 60);
                //保存提交
                resp.addCookie(cookie1);
                resp.addCookie(cookie2);

在项目的过滤器中通过过滤页面实现自动登录

//session得到首次登录登录的用户信息
//session得到使用cookie自动登录后的用户信息
//只要有一个用户信息不为空,说明已登录了,直接放行,退出
//如果两个用户信息都是空,判断Cookie是否为空,是说明从未登陆过需要跳转到登录页面,cookie不是空说明曾经登录成功过,要去自动登录。自动登录成功后要保存用户信息,以便于过滤验证

HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) resp;

        HttpSession session = request.getSession();
        //得到首次登录登录的用户信息
        EmpManager empManager = (EmpManager)session.getAttribute("empManager");
        //得到使用cookie自动登录后的用户信息
        EmpManager empManager1 = (EmpManager)session.getAttribute("empManager1");
        //只要有一个用户信息不为空,说明已登录了,直接放行,退出
        if(empManager != null || empManager1 != null){
            chain.doFilter(req, resp);
            return;
        }
        Cookie[] cookies = request.getCookies();
        System.out.println("cookie是否为空:" + cookies);
        String username = "";
        String password = "";
		//如果两个用户信息都是空,判断Cookie是否为空,是说明从未登陆过需要跳转到登录页面,cookie不是空说明曾经登录成功过,要去自动登录。
        if (cookies != null) {
            for (Cookie c : cookies) {
                System.out.println(c.getValue());
                if ("username".equals(c.getName())) {
                    username = URLDecoder.decode(c.getValue(), "utf-8");
                }
                if ("password".equals(c.getName())) {
                    password = URLDecoder.decode(c.getValue(), "utf-8");
                }
            }
            System.out.println(username);
                EmpManager empManager2 = service.login(username, password);
                if (empManager2 != null) {
                    // 保存自动登录的用户信息
                    request.getSession().setAttribute("empManager1", empManager2);
                    request.getRequestDispatcher("/manager/empList").forward(req,resp);
                    //response.sendRedirect(request.getContextPath() + "/manager/empList");
                }
   
        }else{
            response.sendRedirect("/Day1014/login.html");
        }

2,token实现自动登录后期更新

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值