[ASP.NET][Session] 使用 SQLServer 會話管理解決 Session 丟失問題

使用 SQLServer 會話管理解決 Session 丟失問題

步驟

  1.經過命令行執行 aspnet_regsql.exe 程序(不要雙擊安裝),先在 CMD 中輸入命令sql

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.檢查數據庫服務器

  自動增長了兩張表。session

 

  3.在 Web.Config 中加入代碼測試

    <sessionState sqlConnectionString="server=.;database=ZSZ;uid=sa;pwd=123456" allowCustomSqlDatabase="true" mode="SQLServer" timeout="1000"></sessionState>

 

測試

  新建一個 HomeController 進行測試,分別是從 Show() 和 Write(),一個是從 Session 中顯示內容,另外一個是在 Session 中插入內容。ui

        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 方法後spa

 

  觀察數據庫表變更命令行

 

  如今從新啓動調試程序,打開 http://localhost:5451/home/show,會發現不須要從新對 Session 進行賦值。3d

  【注意】調試時不要關閉瀏覽器。

 

 

注意事項

  1.不要直接雙擊使用 aspnet_regsql.exe 進行建立,要直接使用步驟中的命令去生成,不然無效。

  若是經過可視化界面去操做,生成的結果是(見下圖),和命令行生成的結果不一致。

 

  2.在進行校驗 session 狀態是否成功時,請不要關閉瀏覽器,從新啓動調試便可。由於服務器中的 SessionId 和瀏覽器的中 Cookie 是進行關聯的,一旦咱們關閉了瀏覽器,默認的狀況下可能會清空 Cookie 中的信息,當再次打開後,會從新和服務端創建鏈接並從新分配 SessionId,也就是說以前保存入庫的 SessionId 已經失效,須要從新對 Session 賦值才行。

相關文章
相關標籤/搜索