ASP.NET:認証が期限切れになったときにformsauthenticationTicketオブジェクトを取得する方法
-
11-10-2019 - |
質問
ユーザーの現在のFormSauthenticationTicketの期限切れのプロパティを確認して、認証期間が期限切れになったかどうかを確認しようとしています。しかし、期間が期限切れになったとき、チェックするチケットを作成するのに十分な情報を取得することはできません。私はこれを試しました:
FormsIdentity id = (FormsIdentity)User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;
ただし、認証期間の有効期限が切れた場合、ユーザーはnullです。だからそれはうまくいきません。私はこれを試しました:
HttpCookie authCookie = context.Request.Cookies[FormsAuthentication.FormsCookieName];
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
しかし、フォームクッキーは認証期間が切れたときになくなりました。つまり、authcookieはnullになります。だからそれはうまくいきません。
実際に何らかの方法はありますか 得る formsauthenticationTicketオブジェクト認証期間が切れたとき?オブジェクトに「期限切れの」プロパティがあるため、ある必要があります。何が足りないの?
ありがとう。
解決
期限切れのクッキーは、クライアントブラウザによってヘッダーから除外されます。したがって、クライアントがあなたにそれを与えないので、それを取得するコード・ビヒンドの方法はありません。 JavaScript Cookieを使用して生のCookieデータを取得し、ポストヘッダーまたはAjaxコールに何らかの目的で配置することが可能かもしれませんが、JavaScript Cookieメカニズムはブラウザと同じ有効期限制限があると思います。期限切れのクッキーはもはや有効ではなく、したがってアクセスできません。
他のヒント
ブラウザ(つまりのみ)が期限切れを削除しないと仮定します クッキー, 、ASP.NETは、期限切れの認証を削除しているようです チケット request.cookiesコレクションの外。それはまだrequest.header ["cookie"]にありますが、Cookiesコレクションでは利用できません。これは、「BeginRequest」と「Authenticaterequest」イベントの間にいつか発生すると思います。私は同じ問題にぶつかり、それをさらに自分で探索しています。
void context_BeginRequest(object sender, EventArgs e)
{
string cookie = ((HttpApplication)sender).Context.Request.Cookies[".ASPXFORMSAUTHSS"].Value;
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie);
}