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的值。