并非每一种Web应用程序都使用会话,一些具备验证机制、功能复杂的安全性至关重要的应用程序选择使用其他技术管理状态。常见的会话替代方案有两种。
HTTP验证
。使用各种基于HTTP验证技术(基本、摘要、NTLM验证等)的应用程序有时避免使用会话。在HTTP验证中,客户端组件使用HTTP消息头通过浏览器直接与验证机制交互,而不是通过包含在任何单独页面中的针对特定应用程序的代码与验证机制交互。一旦用户在浏览器对话框中输入他的证书,浏览器将会在随后向同一服务器提出的每个请求中重复提交这些证书(或重复执行任何必要的握手)。这种做法等同于应用程序使用基于HTML表单的验证,并在每个应用程序页面插入一个登录表单,要求用户通过他们执行的每一项操作重复验证自己的身份。因此,如果使用基于HTTP的验证,应用程序可以不必使用会话,而通过多个请求重复确定用户身份。然而,基于因特网的应用程序很少使用HTTP验证。而且,由于会话机制发展完善,能够提供其他用途非常广泛的功能,实际上,几乎所有的Web应用程序都采用这种机制。
无会话状态机制
。一些应用程序并不发布会话令牌管理用户与应用程序的交互状态,而是传送所有必要数据(一般保存在cookie或隐藏表单字段中),由客户端管理状态。实际上,这种机制以类似于ASP.NET ViewState的方式使用无会话状态。为保证这种机制的安全,必须对通过客户端传送的数据加以适当保护。这通常要求建立一个包含所有状态信息的二进制巨对象,并使用一种公认的算法对这些数据进行加密或签名。还必须在数据中包含足够的上下文,以防止攻击者将在应用程序某个位置收集到的状态对象提交到另一个位置,
造成某种意外行为。应用程序还必须在对象的数据中包含一个终止时间,执行与会话超时相同的功能。我们已在第5章详细介绍过通过客户端传送数据的各种安全机制。