我正在开发一个项目,其中某些登录用户有一个专用页面,可以选择其中的URL。当用户登录时,我想显示“查看我的页面”链接。我只是想知道什么是存储这个baring的最佳方式,只要用户登录就需要访问它(该网站也有记住我的功能)。会话变量会变成什么样吗?还是饼干?还是自定义IPrincipal?
非常感谢
马特
更新:
您使用可以与身份验证Cookie存储的UserData字符串有什么用呢?它似乎满足了我的要求,但我不能说我对此了解很多。
答案 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字符串。这样我知道在用户通过身份验证时数据始终可用。因为我只需要记住简单的数据(用户网址),这似乎是一个很好的解决方案。
任何有相同问题的人都可以在这里找到更多信息:
答案 2 :(得分:0)
如果您的意思是要为每个用户显示不同的自定义网址,而您只想缓存该网址,那么需要考虑以下几点:
如果您使用会话值或cookie,那么您需要代码以确定值不存在的可能性。服务器会话或浏览器会话都可能过期,用户仍然可以登录。
如果您使用cookie,您可以考虑将Cookie到期时间设置为与身份验证Cookie到期时相同,但这仍然无法保证可用性。
Cookie值不安全,可以修改。会话值将是安全的。
如果您正在使用自定义表单身份验证,则可以将URL存储在身份验证Cookie本身中,然后将其加载到自定义IPrincipal中。我建议反对,因为我觉得这不是正确的地方。
如果您只是尝试缓存URL,那么只要您的代码在值不存在时重新获取数据,那么会话值或cookie将会很好,具体取决于所需的安全级别。
如果我读错了,您只想显示/隐藏链接,具体取决于用户是否获得授权,您可以轻松使用
<% if (User.Identity.IsAuthenticated) { %>
<a href="/MyPage">view my page</a>
<% } %>
让控制器中的MyPage操作呈现用户的专用页面。