session和cookie

session和cookie

    @RequestMapping("/login")
    public String userLogin(UserLoginRequest request,HttpServletRequest httpServletRequest){
        String username=request.getUsername();
        String password=request.getPassword();
        List<User> list;
        list=userMapper.GetUser(username);
        if (list.size()==0) return "找不到用户";
        User resultUser=list.get(0);
        String TruePassword=list.get(0).getPassword();
        if (password.equals(TruePassword)) {
            User user=new User();
            System.out.println("用户名:"+username);
            System.out.println("密码:"+password);
            httpServletRequest.getSession().setAttribute(USER_LOGIN_STATE,resultUser);
            return "OK";
        }
        return "用户名或密码错误";
    }

    @RequestMapping("/get")
    public User GetCurrentUser(HttpServletRequest request){
        Object user=request.getSession().getAttribute(USER_LOGIN_STATE);
        System.out.println(user);
        return (User) user;
    }

原理:客户端发起一个登录请求给服务端,这里服务端就会给客户端分配一个唯一的session作为JSESSIONID(并且可以在session里存入一些信息,比如用JSON格式存登陆成功的User对象信息),并且在返回响应的时候带上这个JSESSIONID,那么响应回去之后,客户端再发请求时会携带这个JSESSIONID,也就是cookie,那么服务端就可以根据它知道对应的客户端是谁了(并且可以直接读这个cookie对应的Session里的USER_LOGIN_STATE字段,这样可以实现保存用户登录信息的功能)。

request.getSession.setAttribute(USER_LOGIN_STATE,resultUser)就是服务端在session将字段USER_LOGIN_STATE赋值为resultUser。

这里我们看具体的代码:

    @RequestMapping("/get")
    public User GetCurrentUser(HttpServletRequest request){
        Object user=request.getSession().getAttribute(USER_LOGIN_STATE);
        System.out.println(user);
        return (User) user;
    }//服务端收到request之后,调用getSession()方法,获取到该请求的Session,然后调用getAttribute方法取该Session内字段USER_LOGIN_STATE的值。

image-20241018003442209

posted @ 2024-10-18 00:43  vast_joy  阅读(9)  评论(0编辑  收藏  举报