Asp.net 多伺服器 Session共用

來源:互聯網
上載者:User

需求:

  公司下派任務,之前的網站是一台伺服器,由於使用者過多,負載過大,現在老大要求多加一台伺服器。加就加貝,應該跟我這DEV沒有

關係吧,應該不會碰到Source的吧。但是,之前網站有一些資料是放在Session裡面的。大家應該理解Sessino的機制(自己的理解):當使用者訪問伺服器的時候,會在Cookie裡面留下一個SessionId,HttpContext.Current.Request.Cookies["ASP.NET_SessionId"].Value就能取到,然後伺服器會根據這個SessionId 來跟我伺服器這邊進行資料匹配,簡單說就是拿你的SessionId來取存放在我伺服器端的資料,類似於Key:Word。由於當一個用戶端訪問一個伺服器,存放在Session的資料是在伺服器端的,若是我加一台伺服器的話,這Session的資料就要共用出來,能夠讓我兩台機器同時訪問到。這樣,使用者訪問伺服器的時候,我切換伺服器機器就不會丟失Sesson裡面的資料了。

  步驟

  在網上搜了關於Session 共用的方法,http://www.cnblogs.com/xinhaijulan/archive/2010/08/21/1805116.html  有很多,我就選擇一個SqlServer共用Sessin的方法。

    1。

  首先,你得建立這個Sqlserver資料庫。cmd命令。C:\Windows\Microsoft.NET\Framework\v2.0.50727>aspnet_regsql.exe -S jpmsnmdb05t - E -d AWBUISession -ssadd -sstype c

    命令不懂的看我文中的連結。很簡單。

    或者 運行C:\Windows\Microsoft.NET\Framework\v2.0.50727 裡面的 InstallPersistSqlState.sql(建立資料庫) UninstallPersistSqlState.sql(卸載)

      2。

  然後,在Asp.net 項目中的Web.config裡面<system.web>輸入

  標籤裡面不懂也看連結

<machineKeyvalidationKey="1234567890123456789012345678901234567890AAAAAAAAAA"decryptionKey="123456789012345678901234567890123456789012345678"validation="SHA1"decryption="Auto"/>
<sessionStatemode="SQLServer"sqlConnectionString="server=jpmsnmdb05t; database=AWBUISession;Trusted_Connection=Yes; Persist Security Info=False;"allowCustomSqlDatabase="true"cookieless="false"timeout="100"/>

   然後,在程式裡面進行Sesssion["test"]="test value" 或則取Session的內容看看,ok,都會將Session的資料放到我建立的資料庫裡面。

  注意

  若是按照我上面的配置還沒有成功的朋友,我只能說,你肯定犯錯了,請見下面對照一下:

  1.  寫入Session的值一定要是可序列化的(我就碰到這個問題,把我搞死了,剛開始都不懂,看網上就說一句注意可序列化我也沒有注意,真正自己配置不成功的時候就哭吧)我來舉個例子,比如你建立了一個類User,當你Sesssion["User"]=new User("name","pwd");  你要記住User類一定要序列化,不然你就永遠不會成功,如何序列化,很簡單在public class User上面添加一句話[Serializable()].記住所有的都要序列化,只要你向Session裡面設值了,因為系統會把你寫入Session 裡面的值進行序列化後存放到ASPStateTempSessions表裡面的。

    2.  我自己配的測試環境,在http://www.cnblogs.com/xinhaijulan/archive/2010/08/21/1805116.html 我還問了別人如何配置,當時我也不清楚我建立的測試環境是不是正確的。

    我的配置環境(下面是我問別人的話) :   

    不知道樓主能不能看到,實在是沒辦法了,都糾結好久了。
    我按照你的方式進行配置,我目的是想多台伺服器共用session,利用Sql server。 我不知道我的測試方法對不對,我設定本地    host為 172.23.126.137 SessionTest # source server           10.168.109.120 SessionTest # x client host
我將My Code放到這兩台伺服器上面,然後我停掉一台伺服器IIS,然後訪問 http://sessiontest:8078/ 比如使用者登入功能,它會在SqlServer上面添加一條記錄。 然後我開啟這台,停掉另外一台,訪問Url,它還是使用者登入頁面,按道理應該是檢測使用者資訊成功,不會再次進行使用者登入的。 兩台伺服器IIS都是,8078連接埠,只是IP不同。 希望樓主能看到,希望.......             雖然樓主回答了我的問題,然而還是沒有看懂,但是還是非常感謝那位朋友,過了兩三天,我自己還是發現問題的原因:        我要提到一個問題,ASPStateTempSessions表裡面的SessionId其實是SessionId+AppId(佔8位).   AppId是ASPStateTempSessions表裡面AppId的十六進位表示。我在網上看了好多資料,ASPStateTempSessions表裡面的AppId到底是什麼東西。無意中,我的測試人員提醒了我一下,我截個圖 ,如下,看到26沒有 。    我的ASPStateTempSessions表如下。     AppId                 APPName   -1977566844        /lm/w3svc/26/root    

                只要你在多個伺服器裡面把ID設為一樣的就可以了。若是有不懂得可以問我,我最近在搞這個東西。

 

 

  

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.