介紹一三種Session存儲方式


簡單來說,Session就是服務器給客戶端的一個編號,當一台web服務器運行時,可能 是有多個用戶都在瀏覽這台服務器上的網站,當每個用戶首次與這台服務器建立連接時,它就與這個服務器建立了一個Session,同時服務器就會自動為其分 配一個SessionId,用以標識這個用戶的唯一身分,這個Session就是有服務器隨機產生的一個由24個字符組成的字符串。

         這個唯一的SessionId還是有很大的實際意義,當一個用戶提交表單時,瀏覽器就會將用戶的SessionId自動附加在HTTP頭信息中,當服務器 處理完這個表單后,就會將結果返回給SessionId所對應的用戶。

          如下是Web.config如何配置Session的:

           <configuration>
<system.web>
<sessionState mode=" Off | InProc | StateServer | SQLServer "
cookieless=" true | false "
timeout=" number of minutes "
stateConnectionString=" tcpip=server:port "
sqlConnectionString=" sql connection string "
stateNetworkTimeout=" number of seconds " />
</system.web>
</configuration>

其中各個節點屬性:
mode: Session的存儲方式(必有的屬性)。
InProc:將Session存到進程內(這是Default值。)
off:禁用Session.
StateServer:將Session存到獨立的狀態服務中(Asp.net State Service).
SqlServer:將Session存到SqlServer中。
Cookieless:設置客戶端Session存儲的方式。
false:使用Cookie模式(default).
true:使用Cookieless模式。
timeout:設置Session過期時間(default is 20 minutes)
stateConnectionString: 設置Session獨立存放的狀態服務所在服務器的名稱(地址)和端口號,當mode=&ldquo;stateserver時,這個屬性就是必 須的。
sqlConnectionString:設置與Sqlserver的連接字符串,當mode="sqlserver"時,這個屬性時必須的。
stateNetWorkTimeout:設置當mode=&ldquo;StateServer&rdquo;時,經過多少秒空閑后, 斷開web服務器與存儲狀態信息服務器的TCP/IP連接(default is 10 seconds).

asp.net中客戶端Session的存儲。
asp.net中,默認是使用Cookie存儲Session的,如果是將cookieless="false",改成 cookieless="true",則session就不用cookie來存儲了,而是使用url來存儲。

asp.net服務器端session存儲在進程內(inproc)
當mode="Inproc"時,服務器的Session存儲在IIS進程中,當IIS關閉,重啟時,這些Session信息就會丟失,但這種模式最大的 好處就是性能提高。

      asp.net服務器端Session存儲在進程外(StateServer)
當mode="StateServer"時,服務器的Session就存儲在"ASP.NET State Server"這個服務的進程中,在服務中找到名為:&ldquo;ASP.NET State Service&rdquo;的服務,啟動這個服務,在資源管理器的進程中就能找到一個名 為:&ldquo;aspnet_state.exe"的進程,這個就是我們保存 Session的進程。
&rdquo;ASP.NET State Server"服務可以與Web服務器分開.eg:web服務器在192.168.0.100上,&ldquo;asp.net state service"服務在192.168.0.101上,則可以進行設置:
mode="StateServer" stateConnection="tcpip=192.168.1.101:42424".

     asp.net服務器端Session存儲到SQLServer中(SQLServer),
當mode="sqlserver"時,服務器的Session就是存儲到Sql server中建立一個存儲Session的數據庫。在
%windir%\Microsoft.NET\Framework\v2.0.50727 下有個名為: InstallSqlState.sql 的sql腳本文件. 這個腳本是專門用來建存儲Session的數據庫以及一個維護Session信息數據庫的SQL Server代理作業的.

      執行此sql腳本后,會看到一個新增的aspstate數據庫,但這個數據庫中,只有存儲過程,沒有用戶表,用戶表放到了tempdb這個數據庫中去 了,ASpstateTempSessions和ASPStateTempApplications,Session信息存儲到了 ASPStateTempApplication存儲了asp中Application對象信息。

    另外查看管理->SQL Server代理->作業,會發現多了一個名為:

ASPState_job_DeleteExpiredSession的作業,這個作業實際上是每分鍾去ASPStateTempSession中 刪除過期的Session信息。

      上面的方法是建立Session數據庫的一個”官方“方法,但在實際的應用中一般沒這么去建,而是采用另一種方法,使用下面這段命令來自動創建 Session數據庫:

  

aspnet_regsql.exe -S ServerName\InstanceName -U User -P Password -d DBName -ssadd -sstype c

      此命令將在ServerName\InstanceName建立DBName的數據庫, 用戶存儲Session的數據庫. 此數據庫中包含了存儲過程和用戶表. 同時在SQL Server代理 -> 作業 中也加入了相應的作業.

      然后在Web.config中設置好配置信息:

mode="SQLServer" sqlConnectionString="data source=ServerName\InstanceName; Integrated Security=SSPI;"

      "Integrated Security=SSPI;" 是指使用Windows集成身份驗證.

       如果使用SQL用戶登陸方式. 則在sqlConnectionString中設置好"userid=sa; password=***".

      這樣一來就可以將Session存放到SQLServer中了


免責聲明!

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



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