0

我使用會話來存儲幾個值,它工作正常。當這些值爲空時,我需要處理這個。通常他們的價值是在他們第一次訪問該網站時在登錄頁面上設置的。困惑會話和身份驗證

1.我是否需要檢查身份驗證以查看會話是否已過期?

什麼困惑我的是這個帖子:How to Check whether Session is Expired or not in asp.net

的答覆使用Session和IsAuthenticated爲同一目的。

2.身份驗證使用Session還是他們是一樣的?

3. SessionId是否到期或爲該瀏覽器窗口更改?

我注意到SessionId是在打開瀏覽器頁面時創建的,至少我假設這是。所以,如果我錯了,請糾正我。

4.我是否檢查他們是否通過身份驗證來檢查我的會話變量是否仍然有效?

這是我想出了,我要檢查,看看是否Session變量是有效的,如果他們進行身份驗證的每個控制器方法:

if (!HttpContext.User.Identity.IsAuthenticated) 
    { 
    Logging.WriteLog("User.Identity.Authenticated returned false"); 
    return RedirectToAction("Logon", "Account"); 
    //return View("Logon"); 
    } 

5 ..我是否有正確的想法?

請爲我清除一些!

+0

你正在使用什麼樣的認證機制? –

+0

Sry,我已經添加了它,SqlMembershipProvider。 – ErocM

回答

1

ASP.NET Session基於一個唯一的用戶/瀏覽器ID,它被設置在一個cookie中。會話在整個用戶的整個瀏覽會話中都應該有效。當用戶關閉瀏覽器時,該cookie將被刪除,並且會話結束。它與您正在使用的任何身份驗證是分開的 - 儘管您可以在身份驗證過程中設置/刪除值。

+0

「會話應該在用戶的整個瀏覽會話中都有效。」 - 不必要。如果用戶處於非活動狀態,即使他沒有關閉瀏覽器,會話也會在可配置的超時後過期。如果使用InProc會話,如果AppDomain在服務器上被回收,會話將會丟失。 – Joe

+0

對。我過去簡化了Session。 –

1

在ASP.NET中,Session完全獨立於身份驗證。

如果您使用表單身份驗證,則表單身份驗證票證存儲在與會話Cookie無關的表單身份驗證Cookie中。

一般而言,特別是如果您使用InProc會話,最好假設會話隨時可能過期,例如,因爲AppDomain在服務器上被回收。

理想情況下,測試null,然後從持久存儲(如數據庫)重新創建Session對象(如果它爲null)。如果這是不可能的,您必須將用戶重定向到登錄頁面並讓他重新開始。

+0

你如何使用數據庫來存儲信息?如果您不能使用SessionId,那麼會將用戶綁定到數據庫中的記錄? – ErocM