使用进程内会话状态模式时请考虑下面的限制: 使用进程内会话状态模式时,如果
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。 修改