Session如何保存在sql數據庫中


   aspnet中,session默認以inproc模式存儲,也就是保存在iis進程中,這樣有個優點就是效率高,但不利於為本負載均衡擴展。可以把session信息保存在SQL Server中,據說,該種方式比起inproc性能損失為10%-20%。如何實現呢,主要分兩步介紹:

  一.這個方法網站找的 具體我也沒實現

      1、初始化SQL Server中的狀態數據庫

            ASP.NET SQL Server 提供注冊工具Aspnet_regsql.exe,用於創建供 ASP.NET 中的 SQL Server 提供程序使用的 Microsoft SQL Server 數據庫。Aspnet_regsql.exe位於  /%windir%/Microsoft.NET/Framework/<versionNumber>/aspnet_regsql.exe 目錄下。如果麻煩,可以 直接用visual studio tools 的命令提示工具中直接輸入aspnet_regsql.exe使用。用法如下:

 

    Aspnet_regsql.exe <options>

    可以用如下的語法來添加默認session數據庫ASPState

    aspnet_regsql.exe -S localhost -U sa -P why1234? -ssadd -sstype p

    -S,-U/-P

     必須是大寫,分別表示數據庫服務器,用戶名和密碼。

    -ssadd / –ssremove 參數:

     -ssadd表示是添加Session數據庫, -ssremove表示移除Session數據庫.

    sstype 參數:    

  選項

說明

t

將會話數據存儲到 SQL Server tempdb 數據庫中。這是默認設置。如果將會話數據存儲到 tempdb 數據庫中,則在重新啟動 SQL Server 時將丟失會話數據。

p

將會話數據存儲到 ASPState 數據庫中,而不是存儲到 tempdb 數據庫中。

c

將會話數據存儲到自定義數據庫中。如果指定 c 選項,則還必須使用 -d 選項包括自定義數據庫的名稱。

     創建自定義數據庫myAppState,可以用如下的語法:

     aspnet_regsql.exe -S localhost -U sa -P why1234? -ssadd -sstype c -d myAppState

 

2、配置webconfig

    在webconfig的  <system.web>節下添加如下配置:

     <sessionState mode="SQLServer"  sqlConnectionString="server=localhost; uid=sa; pwd=123456;"/>

   如果在初始化數據庫的時候,創建了自定義數據庫可以用類似於如下的的配置:

<sessionState mode="SQLServer"  allowCustomSqlDatabase="true" sqlConnectionString="server=localhost; DataBase=myAspState;uid=sa; pwd=123456;"/>

 

    通過以上兩步的設置,已經可以了。詳細情況請參閱msdn。

 

二 .這個方法解決了我的問題 

打開VS2005命令提示,輸入:aspnet_regsql.exe -?

出現了aspnet_regsql.exe的說明,往下拉會看到"會話狀態選項",有一命令:-ssadd(Session state add?) 解釋說:添加對 sqlserver 模式會話狀態的支持.

估計就是這個了,輸入: aspnet_regsql.exe -ssadd

提示:請指定用戶ID,或對受信任的連接使用-E

輸入如下:aspnet_regsql.exe -ssadd -E

成功.

 

也可以指定用戶名:aspnet_regsql.exe -ssadd -S 數據庫實例名(可指定遠程服務器) -U 登錄名 -P 密碼 

會提示輸入密碼.正確輸入后也會執行成功.

 

刪除該功能的話執行aspnet_regsql.exe -ssremove -E

就OK了.

 

然后就是在你項目config下<system.web>節點下修改sessionState 配置為<sessionState mode="StateServer" sqlConnectionString="data source=.;userid=sa;password=svse;Trusted_Connection=yes" timeout="720"/>

 

注:只需要在你保存的session的服務器數據庫執行一次就OK了,並且你所有部署網站的服務器需要打開ASP.NET 狀態服務 (ASP.NET state service)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM