public interface HttpSession
提供一种方式,跨多个页面请求或对 Web 站点的多次访问标识用户并存储有关该用户的信息。
servlet 容器使用此接口创建 HTTP 客户端和 HTTP 服务器之间的会话。会话将保留指定的时间段,
跨多个连接或来自用户的页面请求。一个会话通常对应于一个用户,该用户可能多次访问一个站点。
服务器能够以多种方式维护会话,比如使用 cookie 或重写 URL。
此接口允许 servlet
查看和操作有关某个会话的信息,比如会话标识符、创建时间和最后一次访问时间
将对象绑定到会话,允许跨多个用户连接保留用户信息
当应用程序将对象存储到会话中或从会话中移除对象时,该会话将检查对象是否实现了 HttpSessionBindingListener。
如果实现了,则 servlet 将通知该对象它已经被绑定到会话,或者已从会话中取消对它的绑定。通知是在绑定方法完成后发送的。
对于无效或过期的会话,通知是在会话已经无效或过期之后发送的。
当容器使用分布式容器设置在 VM 之间迁移会话时,所有实现 HttpSessionActivationListener 接口的会话属性都会得到通知。
servlet 应该能够处理客户端选择不加入会话的情况,比如故意关闭 cookie 时。在客户端加入会话前,isNew 一直返回 true。
如果客户端选择不加入会话,则 getSession 将对每个请求返回一个不同的会话,并且 isNew 将总是返回 true。
会话信息的范围仅限于当前 Web 应用程序 (ServletContext),因此存储在一个上下文中的信息在另一个上下文中不是直接可见的。
See also javax.servlet.http.HttpSessionBindingListener, javax.servlet.http.HttpSessionContext
buy.html
<body>
<a href="/day07/servlet/SessionDemo1">购买</a>
<a href="/day07/servlet/SessionDemo2">付账</a>
</body>
SessionDemo1.java
HttpSession session=request.getSession();
String sessionid=session.getId();
Cookie cookie=new Cookie("JSESSIONID", sessionid);
cookie.setPath("/day07");
cookie.setMaxAge(30*60);
response.addCookie(cookie);
session.setAttribute("name", "电视");
SessionDemo2
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
HttpSession session=request.getSession();
String product=(String) session.getAttribute("name");
out.write("你购买的商品是:"+product);