会话状态方式之SQL Server

会话状态模式之SQL Server

    每个客户(严格的说应该是浏览器)访问网站时,都会创建相应的Session,用来保存客户的状态信息。

     

    五种模式介绍

    根据保存位置不同,共有5种模式。

    (1)InProc模式(进程内模式) 。为默认设置。

            会话状态存储在Web服务器上的内存中

    (2)StateServer模式(状态服务器模式)。

            会话状态存储在一个名为ASP.Net状态服务的单独进程中。这确保了在重新启动Web应用程序时会保留会话状态,并让会话状态可用于网路场中的多个Web服务器。

    (3)SQL Server模式。

            会话状态存储到一个SQL Server数据库中。这确保了在重新启动Web应用程序时会保留会话状态,并让会话状态可用于网路场中的多个Web服务器。

    (4)Custom模式

            此模式允许您指定自定义存储提供程序

    (5)Off模式

            此模式禁止会话状态。

    设置

    通过再Web.config文件中设置sessionState元素的mode属性指定会话模式

<system.web>
//SQLServer方式
    <sessionState mode="SQLServer" sqlConnectionString="server = 192.168.24.151;uid=**;Pwd=***" timeout="525600"></sessionState>
//InProc方式
<sessionState mode="InProc"  timeout="525600"></sessionState>
  </system.web>


525600单位是分钟。因为老师自己使用,想要避免重复的登录,故而把过期时间设置成了1年,也是最大值,够狠吗。

 

经试验,对于进程内模式,虽然设置有效期也是1年,但是时间不到2小时,session就销毁了。很容易理解,内存中的东西,如果不用,操作系统自然会回收再利用。所以,我选择用SQL Server模式来解决这个问题。

 

SQL Server模式

  1. 注册数据库ASPState

执行InstallSqlState.sql

文件位置C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/InstallSqlState.sql

  1. 在ASPState中创建和membership相关的一些表、存储过程。

 执行Aspnet_regsql.exe

 文件位置C:\Windows\Microsoft.NET\Framework\v2.0.50727\Aspnet_regsql.exe

  1. 设置Web.config

 

参考

会话状态模式

 

http://www.cnblogs.com/BoyXiao/archive/2010/03/01/1675659.html

 

无法打开登录所请求的数据库 "ASPState"。登录失败。 用户 'NT AUTHORITY/SYSTEM' 登录失败。