1. 在客户端保存会话状态
优点:相对来说容易实现; 当要保存的状态比较少时,效果很好;而且当需要在多台物理服务器上实现负载均衡时,使用在客户端保存会话状态的策略,也不需要再服务器之间复制会话状态。
常见策略:
HTML隐藏字段;
<input type="hide"..>
缺点:性能影响,尤其保存状态较多时候,每次请求和响应都需要通过网络往复传输;任何对象都必须“字符串化”。
HTTP cookie;
缺点:除了隐藏字段的缺点外,另外对于cookie header的大小有限制。
直接把会话状态放进页面的URL里
ex: <form action=someServlet?var1=x&var2=y method=GET>
另外还有安全问题,需要进行加密。
2. 在表现层保存会话状态
通过一个会话ID(session ID)来获取状态,还有八会话状态保存在业务层(EJB)或资源层
优点:会话状态不会在每个请求中都通过网络传输一次;不会有数据量大小和数据类型方面的限制;
缺点:当需要在多台物理服务器上实现负载均衡时,需要再服务器之间复制会话状态。(但有比应用服务器更高的层次的软件来解决这个问题);另外服务器的负载较大。