2011-02-04 65 views
1

我使用chrome作爲調試瀏覽器。MVC:已登錄,但沒有會話變量?

當我啓動我的MVC(Razor)網站時,請點擊停止按鈕並且網站一直運行在chrome中,而我可以在VS中進行更改......完美。

但有時(由於我不知道有什麼變化),當我刷新一個頁面時,我仍然登錄,但我放棄了所有會話變量。

如果會話變量被清除,我怎麼能捕捉到,所以我可以把我的用戶帶回登錄頁面? (我需要一個金帝的Global.asax page_request方法

我有... <forms loginUrl="~/Account/LogOn" timeout="2880" /> ...但我不是退出。 - 只有會話瓦爾被清除

回答

2

這是因爲你的登錄狀態中的客戶端的cookie持續的會話狀態在堅持在服務器上。內存(或其他)。當你的應用程序重新啓動會話是C.但是用戶在他們的機器上仍然有一個有效的表單認證令牌(假設表單認證)。表單身份驗證默認情況下不會以任何方式使用會話。

因此,在請求開始時,您可以在數據庫爲空時重新加載用戶會話(如果可能,我認爲這是首選方法),或者將用戶重定向到登錄屏幕並顯示「 ooops,對不起,我們已經失去了你的會話「(這是不好的!)

0

如果使用內置的授權功能,你可以添加[授權]屬性有使用這裏自定義身份驗證的一些信息:

ASP.NET MVC Authorization

0

Lee Gunn解釋得很好。一種解決方案是創建一個類似於Authorize的自定義過濾器屬性,驗證會話是否具有您期望的值並裝飾相應的控制器/操作。