關於Session持久化這方面的話題,有很多人已經寫過了,但是,畢竟這是我的項目經驗,更加真實,可用。
進入主題。
情景一,Session ID在用戶端的狀態
情景一中,saved in cookies情況
ID儲存在client端的Cookies集合中
缺點是,如果client端的cookie被禁用,那麼ID無法儲存
設定cookieless="false"
<sessionState
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="datasource=127.0.0.1;userid=sa;password="
cookieless="false"
timeout="20"/>
情景一中,saved in url情況
MS為瞭解決cookie被禁時,也能正常儲存ID,在.net2.0中可以把ID儲存在URL中.
設定cookieless="true"
<sessionState
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="datasource=127.0.0.1;userid=sa;password="
cookieless="true"
timeout="20"/>
情景二,Session狀態在伺服器中的三中模式,進程內、進程外、資料庫。
情景二中,saved in 進程內
設定mode="InProc"
優點;儲存在本機記憶體中,無需跨網路,訪問記憶體速度快
缺點;如果IIS進程發生異常或者WebSite有檔案變更,都被asp.netRuntime監視,然後重新設定Session狀態
<sessionState
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="datasource=127.0.0.1;userid=sa;password="
cookieless="false"
timeout="20"/>
情景二中,saved in 進程外
設定mode="StateServer",啟動asp.net狀態服務
定位註冊表
“HKEY_LOCAL_MACHINE/SYSTEM/ControlSett001/Services/aspnet_state/Parameters“修改AllowRemoteConnection=1,Port=42424
注意這些參數都是十進位類型,且這些設定是在訪問遠程asp.net狀態服務的必要設定。
優點;穩定,即使關閉WWW服務,只要啟動asp.net狀態服務,Session狀態依然存在,不信你試試。
如果把狀態儲存在非本機上只需修改上面的註冊表,修改stateConnectionString="tcpip=RemoteIP:Remoteport",
如果狀態儲存在遠程機上的asp.net狀態服務中,那麼當頁面關閉的時候,Session狀態馬上失效,
不管你的狀態儲存時間設定時間有多長,一律失效,
不信可以考試試,^-^。
<sessionState
mode="StateServer"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="datasource=127.0.0.1;userid=sa;password="
cookieless="false"
timeout="20"/>
情景二中,saved in 資料庫
設定
mode="SQLServer"。
sqlConnectionString="datasource=127.0.0.1;userid=sa;password="。
啟動SqlServer和SqlServerAgent。
定位到[systemdrive]/winnt/Microsoft.NET/Framework/[version]/。
執行InstallSqlState.sql。
然後我們看tempdb資料庫中多了兩個使用者表,而且多了一個ASPstate的空庫,ASPStateTempApplications和ASPStateTempApplications表中
儲存的是應用程式資訊,每個應用程式在啟動的時候在這裡會註冊一條記錄,包括應用程式的ID(通過雜湊演算法產生的)和應用程式名稱,
實際上Session資訊是儲存在了tempdb資料庫的ASPStateTempSessions表中,另外查看管理->SQLServer代理->作業,
發現也多了一個叫做ASPState_Job_DeleteExpiredSessions的作業,這個作業實際上就是每分鐘去ASPStateTempSessions表中刪除到期的Session資訊。
建立一個Asp.netWebSite,按F5,一切OK。
效果圖形
兩張表
ASPStateTempApplications表的資料
ASPStateTempSessions表的資料
ASPState_Job_DeleteExpiredSessions作業
需要注意的地方;
一,ASPStateTempApplications和ASPStateTempSessions表的許可權使用者是sa,既管理員。
二,啟動MsSqlSeverAgent,用來執行清除到期Session的作業ASPState_Job_DeleteExpiredSessions。
三,如果MsSqlServer與WebSite不在同一台機器上,那麼設定sqlConnectionString="datasource=RemoteIP;userid=userName;password=userpwd"
結束
寫得不妥之處,請多多指教。
http://www.cnblogs.com/wmj/archive/2008/01/29/1057619.html