我的目标是在用户进行身份验证时编写一个 cookie。我们使用了一个糟糕的框架,它隐藏了它的源代码和事件模型,所以当我使用他们的登录控件时,我无法在它上面设置会话超时!
无论如何,我试图在用户登录时编写一个 cookie,然后在后续页面视图(滑动到期)上刷新 cookie 过期时间。
所以我想我最初可以在 global.asax 中的 Application_AuthenticateRequest 期间创建 cookie,但即使用户尚未登录,它似乎也会触发。
估计是这样吗?
我的目标是在用户进行身份验证时编写一个 cookie。我们使用了一个糟糕的框架,它隐藏了它的源代码和事件模型,所以当我使用他们的登录控件时,我无法在它上面设置会话超时!
无论如何,我试图在用户登录时编写一个 cookie,然后在后续页面视图(滑动到期)上刷新 cookie 过期时间。
所以我想我最初可以在 global.asax 中的 Application_AuthenticateRequest 期间创建 cookie,但即使用户尚未登录,它似乎也会触发。
估计是这样吗?
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 名称。
是的。Application_AuthenticateRequest 将在每次请求访问网站时发生。如果要对页面进行授权,AuthenticateRequest 以及进行身份验证也将检查并返回。某些页面需要从身份验证和授权检查中排除,例如登录页面。
对于您的情况,您还应该检查页面并排除登录序列中涉及的页面。