2010-02-19 49 views
1

我試圖在我的網站上實現「記住我」功能,以允許用戶保持登錄狀態而無需再次登錄。asp.net FormsAuthentication:如何在配置文件中設置多個超時值?

我做這樣的事情:

System.Web.Security.FormsAuthentication.SetAuthCookie(userName, true); 

我注意到,因爲它依賴於在配置文件中設置的超時值的第二個參數(createPersistentcookie)是不是真的執着。

從我的理解:

如果createPersistentcookie = false,那麼該用戶將自動註銷,如果他/她關閉瀏覽器或活動x分鐘後(X在配置文件中被指定)。

如果createPersistentcookie = true,那麼如果用戶關閉瀏覽器,用戶將不會被註銷,但在x分鐘的活動(配置文件中指定x)後仍會註銷。

請注意,在這兩種情況下'x'具有相同的值並來自配置文件。

我想要做的是:

- 如果遊客不希望留在記錄所有的時間,我想他是不活動的20MN後自動註銷,如果他關閉瀏覽器。爲此,我將createPersistentcookie設置爲false,將超時值設置爲20mn。

- 如果訪問者希望始終保持登錄狀態,我希望他僅在閒置7天后才能自動登出。關閉瀏覽器不會將他註銷。爲此,我將createPersistentcookie設置爲true,將超時值設置爲7天。

您看到問題:在一種情況下,超時設置爲20mn,而在另一種情況下,超時設置爲7天,但在配置文件中,我只能指定1個值。

有什麼建議嗎?

回答

0

createPersistentcookie表示當用戶關閉瀏覽器時cookie是否會被銷燬。您可以指定非常長的生命週期和永久Cookie來記住用戶

+0

我明白這一點,但它並沒有回答這個問題:如果你指定了很長的生命週期,那麼即使那些不想保持登錄狀態的用戶也會受到這個影響。想象一下,有人將他的瀏覽器打開,離開他的桌子,4小時後回來。即使createPersistentcookie = false,他仍將登錄。 – Anthony 2010-02-19 17:39:00

1

問題的標題和第一部分與您最終表達的目標相沖突。

爲了解決第一部分:

你需要自己構建的車票,並明確設置上的Cookie一樣的超時到期,然後設置Cookie。

這說起來容易做起來難,因爲MS中有無限的智慧並沒有公開formsauthentication元素的timeout屬性。有一個非常簡單的解決方法。

查看code in this answer查看創建永久性票證需要什麼。

結論:您沒有做錯任何事,createPersistentCookie功能已破,但可以解決。

爲了解決您的既定目標:

實在是沒有乾淨的方式做到這一點使用FormsAuthentication。任何嘗試這樣做都會導致設計良好,安全的系統周圍出現脆弱的黑客攻擊,而這些系統的實施和利用都很簡單。如果您嘗試使用表單身份驗證,您會發現自己正在追逐鬼魂。

祝你好運。

相關問題