標籤:str use targe 知識庫 mysql 網站 ref www. ros
公司下派任務,之前的網站是一台伺服器,由於使用者過多,負載過大,現在老大要求多加一台伺服器。加就加貝,應該跟我這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的方法。
首先,你得建立這個Sqlserver資料庫。cmd命令。C:\Windows\Microsoft.NET\Framework\v2.0.50727>aspnet_regsql.exe -S jpmsnmdb05t - E -d AWBUISession -ssadd -sstype c
命令不懂的看我文中的連結。很簡單。
然後,在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"/>
到了這一步你在代碼裡面設定Session["name"]="value"的話,他就會將你的資訊儲存在SqlServer你建立的資料庫中Session表中。
讀取的話,我是這樣設定的,從用戶端獲得SessionId,然後根據這個SessionId到表裡面查詢,查到的資料反編譯出來就可以了,不懂得可以看看我的附件,我寫了一個使用者登入測試系統。
當中我遇到了一個問題,就是我不會建立測試環境。光有兩台機器。你要記住,SessionId是cookie資訊,那麼不同的domain(就是URL)他的SessionId是不同的,所以你要建立多個伺服器共用一個session的話,一定要建立一個相同的domain。這樣你就可以隨心所欲訪問那一台伺服器了,舉個例子:比如使用者登入時訪問了第一台伺服器,登入好後,伺服器切換到第二台伺服器了,使用者當然不知道,使用者還在繼續訪問頁面,系統肯定要檢測一下是不是使用者登入了,不然得讓使用者登入去,好,你得看看Session裡面的資訊吧,根據SessionId得到資訊?若是domain不同,你的SessionId不同,現在你的SessionId已經不是之前的那個了,你肯定在懷戀你登入第一台伺服器的SessionId。若是你設定同一個domain的話,好,你無論訪問多少台機器,你的SessionId是一個,那麼取出使用者資訊還不是小case。好,如何建立一個相同的domian:
設定本地的host,本地host路徑在哪?我問同事的,我也不是很清楚了,C:\Windows\System32\drivers\etc
很簡單,你知道你的伺服器IP地址吧。那麼只要修改你的host檔案,看
172.23.126.137 SessionTest # source server
10.168.109.120 SessionTest # x client host
這是我添加的,兩台伺服器,同一個domain:SessionTest
由於我把系統發布到伺服器IIS的時候設定的連接埠號碼是8078,所以我只要在本地訪問http://sessiontest:8078/就好了。
手動的開/關IIS裡面的網站進行切換伺服器。
這樣測試的環境也弄好啦。
有個沒有解決的問題,若是有讀者涉及到也可以交流一下,在本地運行我的VS,訪問頁面,沒有任何的問題,
若是把系統放到伺服器上面,我發現,當我取Session資訊的時候,存放Session資料庫表中滿足我頁面搜尋條件的只有一條,但是它卻出現了兩條,這兩條SessionId,前一大半是一樣的,跟HttpContext.Current.Request.Cookies["ASP.NET_SessionId"].Value 是一樣的。HttpContext.Current.Request.Cookies["ASP.NET_SessionId"].Value這個值,居然跟我ASPStateTempSessions表裡面的SessionId不一樣。我的HttpContext.Current.Request.Cookies["ASP.NET_SessionId"].Value只是ASPStateTempSessions表裡面的SessionId的一半。看,
HttpContext.Current.Request.Cookies["ASP.NET_SessionId"].Value :x0if3uuddqmpl4451jberf2h
ASPStateTempSessions表裡面的SessionId:x0if3uuddqmpl4451jberf2h077b2520
SqlServer Session共用注意點