Redis应用:session分离 【session序列化失败 JSONException异常】
文章目录
session分离思路
当用户在后台首次获取session后,将会在本次会话结束前的每次请求与响应中附带对应的SessionId,唯一对应后台的session域信息(这里分配sessionid并存入cookie是由tomcat自动完成)
所以,简答的思路就是
- 在首次获取session后,将sessionid作为键将对应session域信息序列化后保存到redis数据库内
- 需要获取session域信息时,拿着request携带的cookie中的sessionId值向redis数据库查找对应的数据,并反序列化为Session对象
代码示例
/**
* 保存session
*
* @param req 请求信心
* @return 结果
*/
@GetMapping("/saveSession")
public AjaxResult saveSession(HttpServletRequest req){
System.out.println(new Date()+":::"+req.getSession().getId());
HttpSession session = req.getSession();
session.setAttribute("num",num++);
String sessionString = JSON.toJSONString(session);
redisFullUtil.set(session.getId(),sessionString);
return AjaxResult.success(session.getId()+"::"+session.getAttribute("num"));
}
/**
* 获取保存的session
*
* @param req 请求信息
* @return 结果
*/
@GetMapping("/getSession")
public AjaxResult getSession(HttpServletRequest req){
System.out.printl