簡體   English   中英

會話變量無法在不同控制器之間保持價值

[英]Session variable does not maintain value across different controllers

我正在使用兩個控制器,它們都將一個值保存到Session但是只有一個Controller設法保持其值。

保存該值的代碼行是

Session["LoginDate"] = <dateTimeObject>;

這在兩個Controllers中都是相同的。 第二個控制器是從第一個控制器調用的,而在第二個控制器中,如果我設置了Session的值,那么在返回到調用控制器之前,我們還可以。 如果僅調用First控制器,則可以設置該值並將其發送回客戶端。

我嘗試修改第二個配置文件以包括

<sessionState mode="InProc" timeout="30" />

並確保它們具有相同的.NET,MVC等版本。

關於如何調試此的任何想法? 我還應該檢查什么?

UPDATE
有沒有一種方法可以從不同的服務器傳遞會話狀態,或者由於cookie將在客戶端瀏覽器上使用,usign cookie會更好嗎? 新發現是第二個控制器執行了

Redirect("serverOfController_1");

控制器由MVC內核初始化,因此它具有對當前請求上下文的正確引用。 當您自己創建控制器的實例時,它根本沒有任何上下文,因此它不能使用控制器界面中的任何內容。

為了使該控制器中的方法能夠在該上下文中工作,它不能依賴於控制器接口中的任何內容。 如果要通過該方法設置會話變量,則必須獲取當前上下文並從該上下文訪問Session對象:

System.Web.HttpContext.Current.Session["LoginDate"] = <dateTimeObject>;

創建實例后,還可以從當前控制器復制控制器上下文。 這樣,您創建的控制器將具有與當前控制器相同的上下文。 例:

SecondController second = new SecondController();
second.ControllerContext = ControllerContect;
second.SomeMethod();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM