天天看点

ASP.NET Session值储存于SQL Server

1111 配置 SQL Server 模式

若要使用 SQL Server,首先在将存储会话状态的 SQL Server 计算机上,运行 InstallSqlState.sql 或 InstallPersistSqlState.sql。两个脚本均创建一个名为 ASPState 的数据库,它包含若干存储过程。两个脚本间的差异在于放置 ASPStateTempApplications 和 ASPStateTempSessions 表的位置。InstallSqlState.sql 脚本将这些表添加到 TempDB 数据库,该数据库在计算机重新启动时将丢失数据。相反,InstallPersistSqlState.sql 脚本将这些表添加到 ASPState 数据库,该数据库允许在计算机重新启动时保留会话数据。

默认情况下,两个脚本文件均安装在下面的位置:

systemroot/Microsoft.NET/Framework/versionNumber

然后,在应用程序的 Web.config 文件中,将 <sessionState> 元素的 mode 属性设置为 SQLServer。最后,将 sqlConnectionString 属性设置为 Integrated Security=SSPI;data source=serverName;。

下面显示了 SQL Server 模式的一个配置设置示例。

<configuration>

<system.web>

<sessionState mode="SQLServer"

sqlConnectionString=" Integrated Security=SSPI;data source=dataserver;"

cookieless="false"

timeout="20"/>

</sessionState>

</system.web>

</configuration>

在 SQL Server 模式中,也可以将会话状态配置为在故障转移群集中工作。故障转移群集是两个或更多相同的冗余 Web 服务器,它们将会话数据存储在一台单独的计算机上的 SQL Server 数据库中。如果一个 Web 服务器出现故障,群集中的另一个服务器会接管它的工作,为请求提供服务,会话数据不会丢失。若要配置故障转移群集,请将 Web 服务器的 Web.config 文件中的 <machinekey> 元素设置为相同的值。然后将 Web 服务器的 SQL 连接字符串设置为指向计算机上存储会话数据的 SQL Server 数据库。

下面的示例显示如何以只读方式访问现有的会话状态数据,以动态生成包含用户信息和个人股票证券信息的页。

<%@ Language=C# EnableSessionState=true %>

<html>

<head>

<script runat=server>

void Page_Load(Object Sender, EventArgs E) {

// Obtain data table of user's personal stock data.

DataTable MyStocks =

(DataTable)Session["PersonalStockData"];

// Update HTML output with session values.

Name.InnerText = Session["FirstName"].ToString();

SpouseVal.InnerText = Session["SpouseName"].ToString();

foreach (DataRow Stock in MyStocks.Rows) {

StockList.AddItem(Stock["Symbol"] + ": "

+ Stock["Name"]);

}

}

</script>

</head>

<body>

Hi <span id="Name" runat="server"/>, your spouse is: <span id="SpouseVal" runat="server"/>.

Here are the stocks you and your spouse currently own:

<acme:listbox id="StockList" runat="server">

<! — List box is dynamically populated from code. -->

</acme:listbox>

</body>

</html>

现在所有的Session变量都储存在数据表中,而不是内存中了。你可打开ASPStateTempSessions表来查看这些Session数据了。

删除这些数据库和表

如果你不喜欢这个数据储存方式,看得实在是不爽,那么你可以把这些表和数据库完全删除掉。这个也不要担心这种删除会影响数据库(因为害怕误删除一些数据),因为微软同样也得供给你们一个删除SQL 文件,名叫UnintallSQLState.sql。它与IntallSQLState.sql一样放在.Net的Config目录中