是(HttpContext.Current.User!= null)足以假设FormsAuthentication已对用户进行了身份验证

时间:2009-01-21 18:46:18

标签: c# .net asp.net .net-2.0 forms-authentication

在ASP.NET(2.0)应用程序中,我使用FormsAuthentication。

在Global.asax / Application_AuthenticateRequest方法中,我检查HttpContext.Current.User是否为空。

这是否足以知道表单身份验证cookie是否存在,故障单是否已过期,总体而言,表单身份验证机制是否已完成其工作以验证用户?

我需要这个,因为我在该应用程序中有某些页面,有时不需要访问身份验证(基于某些标准),我将它们放在web.config中的单独“location”指令中将它们从“全部”表格认证中排除。

即。我正在尝试检查Application_AuthenticateRequest,如果在此“位置”访问的页面需要保护,如果是,则要知道用户是否已经过身份验证,或者我需要重定向到登录。

编辑:正如答案所示,我很可能会选择IsAuthenticated。为了让我更好地掌握它,这里有2个奖金问题:)(请编辑其他答案添加这些,谢谢):

  1. 我可以假设,如果IsAuthenticated为true,那么HttpContext.Current.User肯定会包含经过身份验证的用户的用户名吗?

  2. 如果强制执行FormsAuthentication,如何在HttpContext.Current.User中使用“匿名用户”,并且只有少数几个页面被“location”指令排除?

4 个答案:

答案 0 :(得分:28)

不,User可能只是对匿名用户的引用。检查HttpContext.Current.Request.IsAuthenticated

答案 1 :(得分:3)

我通常使用Request.IsAuthenticated。我无法告诉你你的方法是否有效。这听起来应该是,但如果你支持匿名登录可能有副作用吗?

答案 2 :(得分:1)

好问题:除了其他人给出的答案之外,我建议您在4GuysFromRolla网站上查看这篇文章。

答案 3 :(得分:1)

顺便说一句,请务必检查上下文是否也为空(包括您在httpmodule中工作)。