2010-02-05 294 views
4

我正在開發一個項目,其中某些登錄用戶有一個專用頁面供他們選擇URL。當用戶登錄時,我想顯示一個鏈接「查看我的頁面」。我只是想知道,只要用戶登錄(該網站還有一個記住我的功能),存儲此警告的最佳方法是什麼,它需要可訪問。會話變量surfice?或一個cookie?或者一個自定義的IPrincipal?會話vs Cookie vs自定義IPrincipal

非常感謝

馬特

UPDATE:

做什麼用,你可以與身份驗證cookie存儲的UserData字符串的你們的事情嗎?它似乎滿足我的要求,但我不能說我對此有很多瞭解。

+0

一個自定義的IPrincipal是不是跨頁持久。 – David 2010-02-05 17:35:01

回答

1

感謝球員,但是我已經結束了使用UserData字符串,您可以與認證cookie一起存儲。這樣我知道用戶通過身份驗證時數據將始終可用。由於我只需要記住簡單的數據(用戶url),這似乎是一個很好的解決方案。

任何人只要有同樣的問題,可以在這裏找到更多的信息:

http://www.asp.net/learn/security/tutorial-03-cs.aspx(見第4步)

0

如果你的意思是,你要顯示不同的自定義URL對於每個用戶,你只是想緩存這些URL然後有一些事情要考慮:

  1. 如果你使用一個會話值或一個cookie,那麼你需要代碼的價值不存在的可能性。服務器會話或瀏覽器會話都可能過期,用戶仍然可以登錄。

  2. 如果您使用cookie,則可以考慮將cookie過期設置爲與驗證cookie過期相同,但這仍然不會保證可用性。

  3. Cookie值將不安全,它可以被修改。會話值將是安全的。

  4. 如果您使用自定義表單身份驗證,那麼您可以將URL存儲在身份驗證Cookie本身中,然後將其加載到自定義IPrincipal中。我會建議反對,因爲我不覺得這是正確的地方。

如果你只是想那麼只要你的代碼重新獲取數據緩存URL當值不存在,那麼會話值或cookie將根據安全級別被罰款需要。

如果我已閱讀,錯了,你只是想顯示/隱藏的鏈接取決於用戶是否被授權與否,你可以簡單的使用

<% if (User.Identity.IsAuthenticated) { %> 
    <a href="/MyPage">view my page</a> 
<% } %> 

而且在你的控制器在我的頁面動作中渲染用戶的專用頁面。

2

表單身份驗證(基於cookie)應該足夠了。在這裏,你可以閱讀有關使用FormsAuthentication與自定義的IPrincipal:

ASP.NET 2.0 Forms authentication - Keeping it customized yet simple

這個網頁是關於窗體身份驗證的工作原理:

Explained: Forms Authentication in ASP.NET 2.0

當您使用窗體身份驗證,您必須授權屬性限制訪問控制器和操作。它工作得很好。您自己的IPrincipal不是必需的。我不會使用Session,因爲它很容易丟失。