Session vs Cookie vs Custom IPrincipal

时间:2010-02-05 15:29:08

标签: asp.net-mvc session cookies

我正在开发一个项目,其中某些登录用户有一个专用页面,可以选择其中的URL。当用户登录时,我想显示“查看我的页面”链接。我只是想知道什么是存储这个baring的最佳方式,只要用户登录就需要访问它(该网站也有记住我的功能)。会话变量会变成什么样吗?还是饼干?还是自定义IPrincipal?

非常感谢

马特

更新:

您使用可以与身份验证Cookie存储的UserData字符串有什么用呢?它似乎满足了我的要求,但我不能说我对此了解很多。

3 个答案:

答案 0 :(得分:2)

表单身份验证(基于cookie)应该足够了。在这里,您可以阅读有关使用自定义IPrincipal的FormsAuthentication:

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

此页面介绍表单身份验证的工作原理:

Explained: Forms Authentication in ASP.NET 2.0

使用表单身份验证时,您具有“授权”属性以限制对控制器和操作的访问。它工作得很好。你自己的IPrincipal是没有必要的。我不会使用Session,因为它很容易丢失。

答案 1 :(得分:1)

谢谢大家,但是我最终使用了可以与身份验证cookie一起存储的UserData字符串。这样我知道在用户通过身份验证时数据始终可用。因为我只需要记住简单的数据(用户网址),这似乎是一个很好的解决方案。

任何有相同问题的人都可以在这里找到更多信息:

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

答案 2 :(得分:0)

如果您的意思是要为每个用户显示不同的自定义网址,而您只想缓存该网址,那么需要考虑以下几点:

  1. 如果您使用会话值或cookie,那么您需要代码以确定值不存在的可能性。服务器会话或浏览器会话都可能过期,用户仍然可以登录。

  2. 如果您使用cookie,您可以考虑将Cookie到期时间设置为与身份验证Cookie到期时相同,但这仍然无法保证可用性。

  3. Cookie值不安全,可以修改。会话值将是安全的。

  4. 如果您正在使用自定义表单身份验证,则可以将URL存储在身份验证Cookie本身中,然后将其加载到自定义IPrincipal中。我建议反对,因为我觉得这不是正确的地方。

  5. 如果您只是尝试缓存URL,那么只要您的代码在值不存在时重新获取数据,那么会话值或cookie将会很好,具体取决于所需的安全级别。

    如果我读错了,您只想显示/隐藏链接,具体取决于用户是否获得授权,您可以轻松使用

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

    让控制器中的MyPage操作呈现用户的专用页面。