项目中如何利用Cookie和Session实现用户的自动登录和购物车的存储

如何利用Cookie实现用户的自动登录:

功能展示:

点击我的账号未登录需要先登录

登录后:

重启服务器:点击我的账号直接进入不需要登录

实现过程:

我的账号:

    //我的账户
    @RequestMapping("/myAccount")
    public String myAccount(HttpSession session,HttpServletRequest request){
        //先从session中获取login_user,只有成功登录之后session中才会有信息
        User login_user = (User) session.getAttribute("login_user");
        if (login_user == null){    //如果为null进登录页面
            //自动登录能否成功,调用自动登录方法
            login_user = autologin(request);
            if (login_user != null){    //如果自动登录成功,返回的login_user就不为空
                //自动登录成功,把登录用户信息放到session
                session.setAttribute("login_user",login_user);
                return "/client/myAccount.jsp";
            }
            return "/client/login.jsp";
        }else {
            return "/client/myAccount.jsp";  //不为null进入我的账户页面
        }
    }

用户登录:

    //用户登录
    @RequestMapping("/login")
    public String login(User user, String remember,String autologin, HttpServletRequest request, HttpServletResponse response, HttpSession session){
        //System.out.println(remember);
        //查询用户名和密码是否存在
        User login_user = userService.findUserByLogin(user);
        if (login_user != null){//如果用户名和密码正确
            if (login_user.getState() == 1){
                if ("1".equals(autologin)){
                    //记住账号和密码保存到
                    addCookie(autologin,user,request,response);
                }
                else if ("1".equals(remember)){
                    //记住用户名,把用户名保存到cookie
                    addCookie(autologin,user,request,response);
                }

                session.setAttribute("login_user",login_user);
                return "/client/myAccount.jsp";
            }else {//用户未激活
                request.setAttribute("login_error","用户未激活,请激活后使用!");
                return "/client/login.jsp";
            }

        }else {

            request.setAttribute("login_error","用户名或密码错误.请重新登录!");
            return "/client/login.jsp";
        }
    }

用户退出:

    //用户退出
    @RequestMapping("/logout")
    public String logout(HttpSession session, Model model,HttpServletRequest request,HttpServletResponse response){
        //从session中移除登录用户信息
        session.removeAttribute("login_user");
        //从cookie中移除保存的用户名
        Cookie cookie1 = new Cookie("bookstore_username",null);
        cookie1.setMaxAge(0);
        cookie1.setPath(request.getContextPath()+"/");
        response.addCookie(cookie1);

        //从cookie中移除保存的密码
        Cookie cookie2 = new Cookie("bookstore_password",null);
        cookie2.setMaxAge(0);
        cookie2.setPath(request.getContextPath()+"/");
        response.addCookie(cookie2);
        model.addAttribute("login_error","用户退出成功,请重新登录!");
        return "/client/login.jsp";
    }

添加Cookie:

    private void addCookie(String autologin, User user, HttpServletRequest request, HttpServletResponse response) {
        //定义cookie对象
        Cookie cookie = new Cookie("bookstore_username",user.getUsername());
        //保存时间为3天
        cookie.setMaxAge(60*60*24*3);
        //cookie的作用路径,当前项目下
        cookie.setPath(request.getContextPath()+"/");
        //把定义好的cookie响应回客户端
        response.addCookie(cookie);
        if ("1".equals(autologin)){ //定义cookie对象,记住密码到cookie

            Cookie cookie2 = new Cookie("bookstore_password",user.getPassword());
            //保存时间为3天
            cookie2.setMaxAge(60*60*24*3);
            //cookie的作用路径,当前项目下
            cookie2.setPath(request.getContextPath()+"/");
            response.addCookie(cookie2);


        }

    }

自动登录:

    //自动登录的判断
    private User autologin(HttpServletRequest request) {

        //定义用户名和密码先为null
        String username = null;
        String password = null;
        //获取全部的cookie信息保存到数据cookies中
        Cookie[] cookies = request.getCookies();

        for (Cookie cookie:cookies){    //循环cookies的数据

            //对比找到cookies中保存bookstore_username的名字
            if ("bookstore_username".equals(cookie.getName())){
                //把对应的bookstore_username的cookie值赋值给上边定义的username
                username = cookie.getValue();
            }
            //对比找到cookies中保存bookstore_password的名字
            if ("bookstore_password".equals(cookie.getName())){
                //把对应的bookstore_password的cookie值赋值给上边定义的password
                password = cookie.getValue();
            }
        }


        System.out.println("username="+username);
        System.out.println("password="+password);


        //定义一个user对象作为返回值
        User user = new User();
        //把从cookie中获取的username和password保存到user对象的属性中
        user.setUsername(username);
        user.setPassword(password);

        System.out.println("1122"+user);

        //根据cookie中获取到的用户名和密码去查询数据库,把查询到的结果返回
        user =userService.findUserByLogin(user);

        System.out.println("2233"+user);

        return user;

    }

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值