SqlServer Session共用注意點

來源:互聯網
上載者:User

標籤: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共用注意點

相關文章

聯繫我們

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