background image

使用进程内会话状态模式时请考虑下面的限制:  使用进程内会话状态模式时,如果 
ASPnet_wp.exe 或应用程序域重新启动,则会话状态数据将丢失。这些重新启动通常会

 

在下面的情况中发生:  在应用程序的 Web.config 

 

文件的 元素中,设置一个导致新

 

进程在条件被满足时启动的属性,例如 memoryLimit

 

。  修改 Global.asax 或 

Web.config 

 

文件。  更改到 Web 

 

应用程序的 \Bin 目录。  用杀毒软件扫描并修改 

Global.asax 文件、Web.config 

 

文件或 Web 

 

应用程序的 \Bin 目录下的文件。  如果在

 

应用程序的 Web.config 

 

文件的 元素中启用了网络园模式,请不要使用进程内会话状态

模式。否则将发生随机数据丢失。  我把 Access 数据库放到\bin 下面去了,导致
Session 老是失效搞得我焦头烂额,去仔细阅读了一下 MSDN 里的《会话状态》,才发现
了这些:  .NET Framework 

 

开发员指南  会话状态 [C#]  请参见  ASP.NET 

状态管理  语言  C#  Visual Basic  全部显示  ASP.NET 

 

提供 Web 应用

程序需要的跨请求状态信息(购物车、数据滚动等)基础结构,并带有内置的会话状态功
能,使您可以采取以下操作:  对从单个浏览器客户端到服务器上逻辑应用程序会话的
请求进行自动识别和分类。  将会话范围的数据存储在服务器上以供跨多个浏览器请求
使 用 。     引 发 适 当 的 可 在 应 用 程 序 代 码 中 处 理 的 会 话 生 存 期 管 理 事 件
(Session_OnStart、Session_OnEnd 

 

等)。  注意 Session_OnEnd 事件仅支持进程

 

内会话状态模式。如果您使用状态服务器或 sql server 模式,则不会引发该事件。  如
果浏览器不在指定的超时时间内重新访问应用程序,则自动释放会话数据。  本主题提

 

供会话状态的概述,介绍如何标识和跟踪活动 ASP.NET 会话;解释会话状态存储和一般
结构,并以一个高级代码示例作为总结。  会话状态概述  HTTP 是一个无状态的协
议,这意味着它不自动指示一个请求序列是否都来自相同的客户端,甚至不指示单个浏览
器实例是否仍活跃地查看某个页或站点。因此,如果没有其他基础结构的帮助,要想生成

 

需要维护某些跨请求状态信息的 Web 应用程序,如购物车、数据滚动等,就可能会非常
困难。  ASP.NET 

 

提供以下会话支持:  便于使用的会话状态功能,该功能是 ASP 

 

开发人员所熟悉的,与其他 .NET Framework API 兼容。  可靠的会话状态功能,可以

 

经受得住 Internet 

 

信息服务 (IIS) 重新启动和辅助进程重新启动而不丢失会话数据。 

可缩放的会话状态功能,该功能可用于网络场(多计算机)和网络园(多进程)两种情况,

 

使管理员可以将更多的处理器分配给 Web 应用程序以提高它的可缩放性。  用于不支

 

持 HTTP Cookie 的浏览器的会话状态功能。  对于核心会话状态方案,其吞吐量相当
于(或高于)ASP 

 

的吞吐量(当向购物车放入项时 50/50 读/写,修改访问的最后一页,

 

验证信用卡详细信息等)。  但是,会话状态不跨 Web 应用程序边界保持。如果执行期

 

间一个 Web 应用程序切换到另一个应用程序,则会话信息不能用于新应用程序。  标

 

识会话  每个活动的 ASP.NET 

 

会话都是使用 120 

 

位的 SessionID 字符串进行标识和

 

跟踪的,该字符串只包含 URL 

 

中所允许使用的 ASCII 字符。SessionID 值是使用保证唯

一性和随机性的算法生成的,其中保证唯一性的目的是确保会话不冲突,保证随机性的目

 

的是确保怀有恶意的用户不能使用新的 SessionID 

 

来计算现有会话的 SessionID。  根

 

据配置应用程序设置的方式,通过 HTTP Cookie 

 

或嵌套有 SessionID 字符串的修改的 

URL   跨 客 户 端 -

 

服 务 器 请 求 与 SessionID   字 符 串 进 行 通 信 。     会 话 状 态 存 储 

ASP.NET 

 

提供一个简单、易于使用的会话状态模型,您可以使用该模型跨多个 Web 请求

 

存储任意数据和对象。它使用基于字典的、内存中的对象引用(这些对象引用存在于 IIS 进
程中)缓存来完成该操作。使用进程内会话状态模式时请考虑下面的限制:  使用进程

 

内会话状态模式时,如果 aspnet_wp.exe 或应用程序域重新启动,则会话状态数据将丢

 

失。这些重新启动通常会在下面的情况中发生:  在应用程序的 Web.config 

 

文件的 元

 

素中,设置一个导致新进程在条件被满足时启动的属性,例如 memoryLimit。  修改