session

状态保持

  1. 店员很厉害,能记住每位顾客的消费数量,只要顾客一走进咖啡店,店员就知道该怎么对待了。这种做法就是协议本身支持状态。
  2. 发给顾客一张卡片,上面记录着消费者信息,一般还有个有效期限。这种做法就是在客户端保持状态。
  3. 发给顾客一张会员卡,只记录卡号,每次消费时店员在店里的系统上匹配卡号对应的客户信息。这种做法就是在服务器端保持状态。

由于HTTP协议是无状态的,第一种无效。cookie是在客户端保持状态的方案,而session机制是在服务器端保持状态的方案。

session

  1. 创建: request.getSession 不存在就创建
  2. 销毁: 过期或者调用HttpSession.invalidate();

服务器创建session出来后,会把session的id号,以cookie的形式回写给客户机;所以cookie需要保存session的id;请求的时候会带有cookie信息

cookie被禁用后可以通过URL重写

  • response.encodeRedirectURL(java.lang.String url) 用于对sendRedirect方法后的url地址进行重写。
  • response.encodeURL(java.lang.String url)用于对表单action和超链接的url地址进行重写

这两个方法非常智能,当检测到浏览器没有禁用cookie时,那么就不进行URL重写了。

 String url = response.encodeRedirectURL(request.getContextPath()+"/servlet/ListCartServlet");
 System.out.println(url);
 response.sendRedirect(url);

集群 session

在集群环境中不同节点session不一致的问题

session_第1张图片
session 分类.png
方式 缺点
粘性session: 将用户分发到指定服务器 丧失容灾性而且影响性能
客户端保存:使用cookie保存所有session信息 不安全,提供传输成本
节点间复制:服务器做session复制 性能随着服务器增加急剧下降
集中式管理:使用其它存储,如DB,内存,NFS(Network File System) 额外定制;序列化问题

spring session
http://docs.spring.io/spring-session/docs/current/reference/html5/guides/httpsession.html#how-does-it-work
http://projects.spring.io/spring-session/#quick-start

参考

http://suhuanzheng7784877.iteye.com/blog/968913
http://blog.sina.com.cn/s/blog_495697e6010143tj.html

你可能感兴趣的:(session)