2014-12-02 90 views
2

我正在使用兩個控制器,它們都將值保存爲Session,但只有其中一個Controller設法維護其值。會話變量不保持跨不同控制器的值

的,節省了將數值代碼行是

Session["LoginDate"] = <dateTimeObject>; 

,這是在兩個Controllers相同。第二個控制器從第一個控制器被調用,而在第二個控制器中,如果我設置了值Session,那麼我們就可以直到回到調用控制器。如果我只撥打第一個控制器,則可以設置該值並將其發送回客戶端。

我試圖修改第二配置文件包括

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

,並確保他們是在同一版本的.NET,MVC等...

任何想法如何調試這個?我還應該檢查什麼?

UPDATE
有沒有辦法從不同的服務器通過會話狀態或將usign餅乾更好,因爲該cookie將在客戶端瀏覽器上?新的發現是,第二控制器做一個

Redirect("serverOfController_1");

回答

0

控制器獲取由MVC核心初始化,使其具有當前請求的情況下正確的引用。當你自己創建一個控制器實例時,它根本沒有任何上下文,所以它不能使用控制器接口中的任何內容。

對於該控制器在該環境中工作的方法,它不能依賴控制器接口中的任何內容。如果你想從方法設置會話變量,你必須得到當前上下文,並訪問了Session對象:

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

您還可以從電流控制器複製控制器上下文您已經創建後實例。這樣,您創建的控制器將具有與當前控制器相同的上下文。示例:

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