HttpSession
对象表示一个用户会话。用户会话中包含了当前用户的相关信息,这些信息可以被同一个会话中多个HTTP请求访问。
当用户第一次进入某个站点时,将为该用户提供唯一ID来标识这次会话。这个ID通常存储在cookie或URL参数中。
下面示例是访问会话对象:
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
}
可以在会话对象中存储信息:
session.setAttribute("userName", "老吴");
这段代码设置一个名为“userName”的属性,其值为“老吴”。
读取该值:
String userName = (String) session.getAttribute("userName");
会话对象中的值保存在servlet容器的内存中。
session和集群
如果你的站点有多台服务器,存储在某个服务器的会话对象中的值,在另外一台服务器中不能访问,如果用户请求在多个服务器之间平均分配(负载均衡),这会导致丢失会话。
这个问题的解决办法是:
– 不使用会话,无状态,如使用json web token
– 集中处理session,单点登录机制
进一步了解,可参考相关资料。