需求:
公司下派任務,之前的網站是一台服務器,由於用戶過多,負載過大,現在老大要求多加一台服務器。加就加貝,應該跟我這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 我還問了別人如何配置,當時我也不清楚我創建的測試環境是不是正確的。
我的配置環境(下面是我問別人的話) :
我將我的代碼放到這兩台服務器上面,然后我停掉一台服務器IIS,然后訪問 http://sessiontest:8078/ 比如用戶登錄功能,它會在SqlServer上面添加一條記錄。 然后我打開這台,停掉另外一台,訪問Url,它還是用戶登錄頁面,按道理應該是檢測用戶信息成功,不會再次進行用戶登錄的。 兩台服務器IIS都是,8078端口,只是IP不同。 希望樓主能看到,希望.......
我按照你的方式進行配置,我目的是想多台服務器共享session,利用Sql server。 我不知道我的測試方法對不對,我設置本地 host為 172.23.126.137 SessionTest # source server