- session依赖于cookie,使用cookie数据存在客户端,不安全,可以直接拿到存的密码。每次访问数据传输量大。
- 所以有了session这个技术,session将信息存在服务器内存,也有缺点,占用服务器内存。
在springmvc中,只要声明,框架就会自动注入session对象,不用自己主动创建
// session示例
@RequestMapping(path = "/session/set", method = RequestMethod.GET)
@ResponseBody
public String setSession(HttpSession session) {
session.setAttribute("id", 1);
session.setAttribute("name", "Test");
return "set session";
}
@RequestMapping(path = "/session/get", method = RequestMethod.GET)
@ResponseBody
public String getSession(HttpSession session) {
System.out.println(session.getAttribute("id"));
System.out.println(session.getAttribute("name"));
return "get session";
}
在分布式部署中session存在不识别的问题
解决办法一
粘性session,同一个ip固定分配给同一个服务器
缺点:这样固定分配其实负载就不一定均衡了,性能不一定会好
解决办法二
同步session。在一个服务器创建session后会将session同步给其他服务器
缺点:服务器同步有开销,互相耦合
解决办法三
专门弄一个服务器用来专门存session
缺点:风险高,这个服务器挂了就都失效,如果部署集群就又回到上面的问题
解决办法四
用数据库存(可部署集群)