nginx Win下實現簡單的負載均衡(3)Session的SqlServer模式配置

龐順龍發表於2019-05-11

快速目錄:

一、nginx Win下實現簡單的負載均衡(1)nginx搭建部署

二、nginx Win下實現簡單的負載均衡(2)站點共享Session

三、nginx Win下實現簡單的負載均衡(3)Session的SqlServer模式配置



Sql Server 中 Session的SqlServer模式的配置

很多時候,由於各種莫名其妙的原因,會導致session丟失。不過ASP.NET還允許將會話資料儲存到一個資料庫伺服器中,方法是將mode屬性變成SqlServer。 在這種情況下,ASP.NET嘗試將會話資料儲存到由sqlConnectionString屬性(其中包含資料來源以及登入伺服器所需的安全憑證)指定的SQL Server中,這樣能夠保證session丟失的問題。

1、  配置ASPState Session 資料庫

在命令列下執行如下命令:aspnet_regsql.exe  -ssadd -sstype p -S <SQL Server IP> -U <User Name> -P <Password>,

該命令對此應用進行了持久化操作。這時會看到多一個ASPState資料庫,裡面兩張表,ASPStateTempSessions就可以用來儲存Session。

注:<SQL Server IP>為資料庫例項名,<User Name>為sa(或與sa同等許可權的),<Password> 為 sa使用者名稱的密碼

2、專案應用

新建一個web測試專案,在加入如下程式碼:
Session["SessionID"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
Response.Write(Session["SessionID"]);


web.config 中增加

<sessionState mode="SQLServer" timeout="40" allowCustomSqlDatabase="false" sqlConnectionString="data source=xxx;uid=sa;password=sasa"/>


執行該網站,之後檢視資料庫ASPState中的資料表ASPStateTempSessions增加了一條資料


注意:只有在寫session 的時候,才會在ASPStateTempSessions表裡增加了一條session記錄。

1. SessionId包括兩個部分:網站生成的24位SessionID及8位AppID,AppName對於不同的站點,其AppName不同,在能夠在不同站點下使24位SessionID相同的情況下。

2. Created和Expires是這個Session的建立日期和有效期 這個有效期是根據配置檔案中TimeOut算出來的,雖然時間達到有效期了 但是還能獲取到session(不知道這個有效期有什麼用,但是用SqlServer的Session的模式 就是為了不掉線,這點也符合了這個初衷)

3. LockData與LockDataLocal都是最後一次更新Session的時間 (每次操作該Session的時候,它的有效期都會改變)。

4. TimeOut是配置檔案中配置的超時分鐘數(這裡的1是我測試超時時間的時候臨時在配置檔案中改的,預設是20).

5. SessionItemShort是真正的Session的內容,資料型別是varbinary(7000),存的內容可以是int string 等常用型別,如果是集合或是物件,則必須是可序列化的([Serializable]可序列化的屬性)。

注意:要設定Session過期刪除,啟動SQL server 代理中的作業完成。


雙擊開啟其實執行的是一個儲存過程的sql指令碼

請喊我大龍哥最後編輯於:3年前

內容均為作者獨立觀點,不代表八零IT人立場,如涉及侵權,請及時告知。

相關文章