Cookies和Session的关系
做一个比喻:
人去银行取钱的场景
浏览器是人,服务器是银行,Cookies是银行卡,Session是银行账号。
浏览器携带Cookies访问服务器,服务器根据Cookies找到相应的Session。
Session可以存于服务器的内存、缓存、外存中
SpringBoot的简单实现
在controller的方法的形参中加上
HttpServletRequest request
通过request.getSession().setAttribute()设置Session
@GetMapping("/callback")
public String callback(@RequestParam(name="code")String code,
@RequestParam(name = "state")String state,
HttpServletRequest request){
accessTokenDTO.setClient_id(clientId);
accessTokenDTO.setClient_secret(clientSecret);
accessTokenDTO.setCode(code);
accessTokenDTO.setRedirect_uri(redirectUri);
accessTokenDTO.setState(state);
String accessToken = githubProvider.getAccessToken(accessTokenDTO);
GithubUser user = githubProvider.getUser(accessToken);
if(user != null){
//登录成功,写cookie和session
request.getSession().setAttribute("user",user);
return "redirect:/";
}else{
//登录失败,重新登录
return "redirect:/";
}
}