这是一个 webform asp.net 4 应用程序。使用 Formsauthentication 方法。
网络配置:
<sessionState
mode="InProc"
cookieless="false"
timeout="1"/>
<authentication mode="Forms">
<forms defaultUrl="~/Default.aspx"
loginUrl="~/Login.aspx"
slidingExpiration="true"
timeout="25" />
</authentication>
问题是,当用户注销时,我需要执行一些操作(例如,在数据库中记录某些内容)。
用户单击“注销”链接的情况非常简单。
现在我正在处理由于超时而注销的问题,我面临两种不同的情况:
- 会话过期,授权没有
- 授权令牌过期,会话仍然有效
在场景 #1 中,我尝试了以下操作:
Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
If Not String.IsNullOrEmpty(Session("Username")) Then
Try
' custom action..
FormsAuthentication.SignOut()
Session.Clear()
Session.Abandon()
Catch ex As Exception
' log the exception
End Try
End If
End Sub
但在这里我有两个大问题:用户在这种情况下不可用(即,我无法检查 User.Identity.isAuthenticated,因此我正在检查 Session("Username"))和FormsAuthentication.SignOut()引发 nullreferenceException . 如何从 FormsAuthentication“区域”注销用户?
场景#2 更复杂,因为我读到授权过期时没有触发明确的事件。我的“意愿”是能够在到期前一刻为用户执行相同的自定义操作。以某种方式可能吗?
某种自定义身份验证提供程序是否可以让我以更好、更强大的方式处理这些情况?