使用 SQLServer 會話管理解決 Session 丟失問題 步驟 1.通過命令行執行 aspnet_regsql.exe 程式(不要雙擊安裝),先在 CMD 中輸入命令 再執行 執行成功的結果為: 2.檢查資料庫 自動增加了兩張表。 3.在 Web.Config 中加入代碼 測試 新建一個 H ...
使用 SQLServer 會話管理解決 Session 丟失問題
步驟
1.通過命令行執行 aspnet_regsql.exe 程式(不要雙擊安裝),先在 CMD 中輸入命令
cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
再執行
語法:aspnet_regsql.exe -S 伺服器ip -U 資料庫登錄名 -P 資料庫密碼 -d 所要放入的資料庫 -ssadd -sstype c
如:aspnet_regsql.exe -S localhost -U sa -P 123456 -d ZSZ -ssadd -sstype c
執行成功的結果為:
2.檢查資料庫
自動增加了兩張表。
3.在 Web.Config 中加入代碼
<sessionState sqlConnectionString="server=.;database=ZSZ;uid=sa;pwd=123456" allowCustomSqlDatabase="true" mode="SQLServer" timeout="1000"></sessionState>
測試
新建一個 HomeController 進行測試,分別是從 Show() 和 Write(),一個是從 Session 中顯示內容,另一個是在 Session 中插入內容。
public ActionResult Show() { if (Session["name"] != null) { return Content(Session["name"].ToString()); } return Content("null"); } public ActionResult Write() { if (Session["name"] == null) { Session["name"] = "wen"; } return Content("OK"); }
執行 http://localhost:5451/home/write 方法後
觀察資料庫表變動
現在重新啟動調試程式,打開 http://localhost:5451/home/show,會發現不需要重新對 Session 進行賦值。
【註意】調試時不要關閉瀏覽器。
註意事項
1.不要直接雙擊使用 aspnet_regsql.exe 進行創建,要直接使用步驟中的命令去生成,否則無效。
如果通過可視化界面去操作,生成的結果是(見下圖),和命令行生成的結果不一致。
2.在進行校驗 session 狀態是否成功時,請不要關閉瀏覽器,重新啟動調試即可。因為伺服器中的 SessionId 和瀏覽器的中 Cookie 是進行關聯的,一旦我們關閉了瀏覽器,預設的情況下可能會清空 Cookie 中的信息,當再次打開後,會重新和服務端建立連接並重新分配 SessionId,也就是說之前保存入庫的 SessionId 已經失效,需要重新對 Session 賦值才行。