一、状态管理的由来
HTTP协议是无状态的,不能保存每次提交的信息,即当服务器返回与请求相对应的应答之后,这次事务的所有信息就丢掉了。
如果用户发来一个新的请求,服务器无法知道它是否与上次的请求有联系。
对于那些需要多次提交数据才能完成的Web操作,比如购物车来说,就成问题了。
二、状态管理的两种常见模式
客户端状态管理技术:将状态保存在客户端。代表性的是Cookie技术。
服务器状态管理技术:将状态保存在服务器端。代表性的是session技术(服务器传递sessionID时需要使用Cookie的方式)。
三、浏览器禁用Cookie的后果
- 如果浏览器禁用Cookie,session还能用吗?
- 答:不能,但又其他的解决方案
- 服务器在默认情况下,会使用Cookie的方式将sessionID发送给浏览器,如果用户禁止Cookie,则sessionID不会被浏览器保存,此时,服务器可以使用如URL重写这样的方式来发送sessionID.
补充:
1、什么是URL重写
浏览器在访问服务器上的某个地址时,不再使用原来的那个地址,而是使用经过改写的地址(即,在原来的地址后面加上了sessionID)
2、如何实现URL重写
- 如果是链接地址和表单提交,使用
response.encodeURL(String url)生成重写后的URL
- 如果是重定向,使用
response.encodeRedirectURL(String url)生成重写的URL
四、结论
信息可以通过下列三种方法之一发送给浏览器:
- 作为Cookie
- 作为隐藏域嵌入HTML表单中,附加在主体的URL中,通常作为指向其他应用程序页面的链接,即URL重写。
- 更加高效的方法:会话跟踪(Session)。