close

把Session存放到SQL資料庫中,然後讓很多站台應用程式間比起互通.

這是一個常見聽到的話題,從網路搜尋的結果有很多個解答,

如下

[ASP.NET]相同的IIS,讓多個網站共用Session資訊

http://kyleap.blogspot.tw/2013/12/aspnetiissession.html

如何設定與啟用 ASP.NET 的 SQLServer 工作階段狀態模式

http://blog.miniasp.com/post/2011/09/14/Configure-SQL-Server-Session-State-Modes-for-ASPNET.aspx

如何讓 IIS6 / IIS7 中同站台不同應用程式間共用 Session 資料

http://blog.miniasp.com/post/2010/01/24/How-to-Share-Session-Across-Applications-in-a-Site.aspx


我自己實作的操作也寫下來.以便對照,

首先一定要利用.NET的工具替我們產稱SQL Server 資料庫存放Session的地方

到資料庫主機 .利用命令提示字元cmd,先切換到 .NET Framework的工作目錄底下,

當下我是先到這個目錄

C:\Windows\Microsoft.NET\Framework\v4.0.30319

執行

C:\Windows\Microsoft.NET\Framework\v4.0.30319>aspnet_regsql.exe -S . -E -ssadd -sstype c -d SessionStateDB

(輸入aspnet_regsql /? 會出現這命令的說明)
我剛剛用的是使用Windows驗證連線,更詳細的指令參考資訊請參考本文開頭的參考網站,


SessionStateDB就是要存放Session的資料庫

執行後好之後使用資料庫料庫連線工具連線到資料庫會看到新增了SessionStateDB資料庫

image


特意標註那個TempGetAppID的預存程序就是我們要來動手腳的地方,

我們先要確保不同Web應用程式的Name是一致的,所以我們就在這邊寫死,

當然有更活的方法,一樣參考本文列表的參考網站.更詳細的做法那邊有.

所以修改SP預存程序的一個段落變成下面這樣

SET @appName = LOWER('ShareSession')  --把所有的APPName都設定成一樣

這樣在各個不同的web 應用程式的web.config裡面

只要加上一行

<sessionState mode="SQLServer" allowCustomSqlDatabase="true" sqlConnectionString="DataSource=192.168.0.117;Database=SessionStateDB;User ID=XXXX;password=XXXXX" sqlCommandTimeout="60" cookieless="false" cookieName="ASP.NET_SessionId" timeout="60" /> 

如此程式在存取Session時通通都到這資料庫裡撈資料了,


接下來我們要到IIS裡去產生一組MachineCode

image



image



選中一台,產生一組金鑰所有應用程式共用,


將取得值寫到webconfig裡面, 

    <system.web>

  <machineKey validationKey="xxx"   decryptionKey="xxxx"   validation="SHA1" decryption="AES"/>
     </system.web> 


這邊有個要小注意就是

各個站台的webconfig檔裡面 http cookie domain也都要設定成一樣!!

<httpCookies domain=".ourdomain.com.tw" />


結束!


參考資料還有:

Sharing ASP.NET Session State Across Applications

http://blogs.msdn.com/b/toddca/archive/2007/01/25/sharing-asp-net-session-state-across-applications.aspx

sharing session state between 2 ASP.NET applications using SQL Server ( Different Cookie Domain)

http://stackoverflow.com/questions/2402785/sharing-session-state-between-2-asp-net-applications-using-sql-server

文章標籤
ASP NET MVC IIS Session
全站熱搜
創作者介紹
創作者 baechang 的頭像
baechang

翁百璋與大泡泡的奇幻旅程

baechang 發表在 痞客邦 留言(0) 人氣()