Session持久化比較(轉)

來源:互聯網
上載者:User

關於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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.