默认情况下,将为所有 ASP.NET 应用程序启用 ASP.NET 会话状态。
会话状态的替代项包括:
-
应用程序状态,存储 ASP.NET 应用程序的所有用户可访问的变量。
-
配置文件属性,将用户值保留在数据存储区中,使它们不会过期。
-
ASP.NET 缓存,将值存储在所有 ASP.NET 应用程序可用的内存中。
-
视图状态,将值保留在页面中。
-
Cookie。
-
可通过 HTML 请求访问的 HTTP 窗体上的查询字符串和字段。
ASP.NET 状态管理建议。
会话变量
Session 属性公开。
TextBox 控件检索到的值。
StockPicks 会话变量返回的值时,必须将此值强制转换为适当的类型。
// When retrieving an object from session state, cast it to // the appropriate type. ArrayList stockPicks = (ArrayList)Session["StockPicks"]; // Write the modified stock picks list back to session state. Session["StockPicks"] = stockPicks;
|
|
|---|
|
会话状态模式。 |
会话标识符
SessionID 值随响应一起发送到浏览器。
SessionID 值。
SessionID 值发送的请求将生成一个新的会话。
|
|
|---|
|
SessionID 值的任何通信。 |
无 Cookie SessionID
true,可以指定不应将会话标识符存储在 Cookie 中。
下面的示例演示一个 Web.config 文件,它将 ASP.NET 应用程序配置为使用无 Cookie 会话标识符。
<configuration>
<system.web>
<sessionState cookieless="true"
regenerateExpiredSessionId="true" />
</system.web>
</configuration>
例如,下面的 URL 已被 ASP.NET 修改,以包含唯一的会话 ID lit3py55t21z5v55vlm25s55:
http://www.example.com/(S(lit3py55t21z5v55vlm25s55))/orderform.aspx
在这种情况下,将为请求启动一个新的会话。
SessionStateModule 之前解析应用程序的名称。
|
|
|---|
|
这降低了恶意用户获取 URL 中的唯一标识符并用它检索存储在会话中的用户私人数据的风险。 |
重新生成已过期的会话标识符
这将在使用已过期的会话 ID 发起无 Cookie 会话请求时,生成一个新的会话 ID。
|
|
|---|
|
这是因为 ASP.NET 会执行重定向,以确保浏览器在 URL 中具有新的会话标识符。 |
自定义会话标识符
CreateSessionID 方法提供的示例。
如果您的自定义类支持无 Cookie 会话标识符,则必须实现一个解决方案以便在 URL 中发送和检索会话标识符。
会话模式
Off。
会话状态模式。
会话事件
会话事件是在 ASP.NET 应用程序的 Global.asax 文件中指定的。
InProc(默认模式)以外的值,则不支持 Session_OnEnd 事件。
|
|
|---|
|
注意,某些防病毒软件可能会更新应用程序的 Global.asax 或 Web.config 文件的最后修改日期和时间。 |
会话状态事件。
配置会话状态
EnableSessionState 值来配置会话状态。
sessionState 元素可指定以下选项:
-
会话存储数据所使用的模式。
-
在客户端和服务器间发送会话标识符值的方式。
-
Timeout 值。
-
Mode 设置的值。
Timeout 值设置为 30 分钟,并指定将会话标识符存储在 URL 中。
<sessionState mode="SQLServer" cookieless="true " regenerateExpiredSessionId="true " timeout="30" sqlConnectionString="Data Source=MySqlServer;Integrated Security=SSPI;" stateNetworkTimeout="30"/>
ReadOnly 以提供对会话变量的只读访问。
并发请求和会话状态
但是,对会话数据的只读请求可能仍需等到解除由会话数据的读写请求设置的锁定。
System.Web.SessionState 命名空间中的会话状态相关的关键类。
|
成员 |
说明 |
|---|---|
|
管理 ASP.NET 会话状态的唯一标识符。 |
|
|
用于存储会话状态变量。 |