前回の質問と回答で、認証タイムアウト検出メカニズムを実装しました。here。 AuthenticateRequestイベントを使用して認証期間が終了したかどうかをキャプチャするコードを実行するHTTPモジュールを実装しました。これを実行するためのコードは以下の通りです:ASP.NET:認証タイムアウト後にFormsAuthenticationTicketがnullになるのはなぜですか?
public class AuthenticationModule : IHttpModule
{
#region IHttpModule Members
void IHttpModule.Dispose() { }
void IHttpModule.Init(HttpApplication application)
{
application.AuthenticateRequest += new EventHandler(this.context_AuthenticateRequest);
}
#endregion
/// <summary>
/// Inspect the auth request...
/// </summary>
/// <remarks>See "How To Implement IPrincipal" in MSDN</remarks>
private void context_AuthenticateRequest(object sender, EventArgs e)
{
HttpApplication a = (HttpApplication)sender;
HttpContext context = a.Context;
// Extract the forms authentication cookie
string cookieName = FormsAuthentication.FormsCookieName;
HttpCookie authCookie = context.Request.Cookies[cookieName]; // no longer a forms cookie in this array once timeout has expired
if (authCookie != null)
{
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
DateTime expirationTime = authTicket.Expiration;
// check if previously authenticated session is now dead
if (authTicket != null && authTicket.Expired)
{
// send them a Response indicating that they've expired.
}
}
}
}
問題は(コード内のコメントを参照)認証期間は、(私がテストに1分に設定します)有効期限が切れた後は、フォームのクッキーがなくなった、ということではありません。これは、認証クッキーがnullになることを意味し、私は自分のコードでヌルチェックを通過しません。しかし、FormsAuthenticationTicketに便利な "Expired"プロパティがあります。このプロパティは、期間が切れているかどうかを確認する必要があると感じます。しかし、クッキーがなくなったら、どうすればそれを得ることができますか?フォームクッキーがなくなっても認証期間が終了したと仮定するのは合理的ですか?
これについてのご支援をいただければ幸いです。
投稿する前に実際に試しましたが、認証期間が過ぎるとUser *はnullになります。だからもう一度..私はチケットの期限切れのプロパティをチェックすることができません。 –
私は、悪い動きを参照してください。私は私の答えを編集しました。 – gbs