2012-10-08 107 views
0

我有一個基本的控制器,所有的控制器擴展,並在基地控制器我做一些會話處理。如存儲用戶ID等MVC 4失去會話

此外,我有一個User類具有其他類如:

class User 
{ 
    public int Id {set;get;} 
    public virtual Location Location {set;get;} 
} 

當我填充此從數據庫(使用代碼IM第一EF),顯然位置不會加載,我應該將它存儲在會話中嗎?

主要問題是我將Id存儲在基本控制器中,每次重新啓動應用程序時都會丟失會話。爲什麼會這樣呢?我擴展會話超時並沒有幫助。

會話處理的最佳做法是什麼?有沒有我可以使用的包裝?

回答

2

Re:在會話中存儲用戶:你可以,只要確保你不需要訪問'Location'屬性而不需要重新連接到會話。如果你不需要這些數據,一個選項就是將你需要的數據複製到一個沒有'Location'的簡單對象中,並將它存儲在Session中。

Re:丟失會話上下文,這是因爲默認是將會話數據存儲在內存中,每次應用程序重新啓動時會丟失會話數據。如果希望該狀態在應用程序重新啓動時持續存在,則可以使用StateServer模式進行會話(但如果要保持服務器重新啓動或在多服務器場中運行,則需要轉到SQLServer路由)。

-1

,你需要什麼 - 這個代碼添加到web.config中/ System.Web程序:

<machineKey validationKey="C5034160419189092507195D247C6FCD9F54D7A967372A23078E09F6440087328A874AD69955F441B526A265CC3A17CDEAAE8AB21A16868F549C3077C39C8E9F" decryptionKey="078FAD13FAC4E41EB0762F0B34E3F4990A144897C3387A70A746187F3AECD8DE" validation="SHA1" decryption="AES" /> 

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

這machinKey從http://aspnetresources.com/tools/machineKey

產生