session和cookie

vast_joy發表於2024-10-18

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

相關文章