これは webform asp.net 4 アプリケーションです。フォーム認証方式を採用しています。
web.config:
<sessionState
mode="InProc"
cookieless="false"
timeout="1"/>
<authentication mode="Forms">
<forms defaultUrl="~/Default.aspx"
loginUrl="~/Login.aspx"
slidingExpiration="true"
timeout="25" />
</authentication>
問題は、ユーザーがログアウトするときに、いくつかのアクション (DB に何かを記録するなど) を実行する必要があることです。
ユーザーが「ログアウト」リンクをクリックするケースは非常に簡単です。
現在、タイムアウトによるログアウトを処理しており、2 つの異なるシナリオに直面しています。
- セッションの有効期限が切れ、承認は行われません
- 認証トークンの有効期限が切れても、セッションは引き続き有効です
シナリオ 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
しかし、ここで 2 つの大きな問題があります。このコンテキストではユーザーを使用できません (つまり、User.Identity.isAuthenticated をチェックできないため、Session("Username") をチェックしています) 。FormsAuthentication.SignOut()は nullreferenceException を発生させます。 . FormsAuthentication「ゾーン」からユーザーをログアウトするにはどうすればよいですか?
シナリオ 2 はより複雑です。承認の有効期限が切れたときに発生する明示的なイベントがないことを読んだためです。私の「意志」は、有効期限が切れる直前に、ユーザーに対して同じカスタム アクションを実行できるようにすることです。何らかの方法で可能ですか?
ある種のカスタム認証プロバイダーを使用すると、これらのケースをより適切かつ堅牢な方法で処理できますか?