2010-02-05 68 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,因为它很容易丢失。