为什么当用户注销时,authenticateRequest会在页面上触发?

时间:2009-05-11 20:40:35

标签: asp.net authentication global-asax

我的目标是在用户进行身份验证时编写cookie。我们正在使用一个隐藏其源代码和事件模型的糟糕框架,因此当我使用他们的登录控件时,我无法在其上设置会话超时!

无论如何,我试图在用户登录时编写cookie,然后在后续页面视图(滑动到期)上刷新cookie过期时间。

所以我想我最初可以在global.asax的Application_AuthenticateRequest期间创建cookie,但即使用户尚未登录,这似乎也会被触发。

这是假设的情况吗?

2 个答案:

答案 0 :(得分:0)

是。每当请求到达网站时,都会发生Application_AuthenticateRequest。如果要对页面进行授权,AuthenticateRequest以及进行身份验证也将检查并返回。某些页面需要从身份验证和授权检查中排除,例如登录页面。

对于您的情况,您还应该检查页面并排除登录序列中涉及的那些。

答案 1 :(得分:0)

Application_AuthenticateRequest会触发每个请求,但如果您使用的是表单身份验证且用户尚未登录,则会发现HttpContext的User属性(通过全局应用程序类文件中的this.User访问)如果用户已登录,则计算结果为null,而它将评估为IPrincipal对象。

所以你可以这样做:

Private Sub Application_AuthenticateRequest(ByVal pObjSender As Object, ByVal pEaDummy As EventArgs)
    If Me.User IsNot Nothing AndAlso Me.User.Identity.IsAuthenticated Then
        If Me.Request.Cookies("authCookieName") Is Nothing Then
            ' Create cookie
        Else
            ' Update cookie
        End If
    End If
End Sub

其中authCookieName是cookie名称。