2

ユーザーの現在の FormsAuthenticationTicket の Expired プロパティをチェックして、認証期間が切れているかどうかを確認しようとしています。しかし、期間が過ぎると、確認するチケットを作成するのに十分な情報を取得することさえできません。私はこれを試しました:

FormsIdentity id = (FormsIdentity)User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;

ただし、認証期間が過ぎると User は null になります。それではうまくいきません。私はこれを試しました:

HttpCookie authCookie = context.Request.Cookies[FormsAuthentication.FormsCookieName];
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);

ただし、認証期間が終了すると Forms Cookie はなくなります。つまり、authCookie は null になります。だからうまくいかない。

認証期間が切れたときに FormsAuthenticationTicket オブジェクトを実際に取得する方法はありますか? オブジェクトに「Expired」プロパティがあるため、存在する必要があります。私は何が欠けていますか?

ありがとう。

4

2 に答える 2

4

ブラウザー (IE のみ) が期限切れのCookieを削除しないと仮定すると、ASP.Net は期限切れの認証チケットを Request.Cookies コレクションから削除するように見えます。Request.Header["Cookie"] にはまだありますが、Cookie コレクションでは利用できません。これは、「BeginRequest」イベントと「AuthenticateRequest」イベントの間で発生すると思います。私は同じ問題に直面しており、自分でさらに調査しています。

    void context_BeginRequest(object sender, EventArgs e)
    {
        string cookie = ((HttpApplication)sender).Context.Request.Cookies[".ASPXFORMSAUTHSS"].Value;
        FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie);
    }
于 2011-01-06T23:08:52.117 に答える
2

期限切れの Cookie は、クライアント ブラウザによってヘッダーから除外されます。したがって、クライアントがそれを提供することはないため、それを取得するコード ビハインド メソッドはありません。JavaScript Cookie を使用して生の Cookie データを取得し、それを何らかの目的でポスト ヘッダーまたは AJAX 呼び出しに入れることは可能かもしれませんが、JavaScript Cookie メカニズムにはブラウザーと同じ有効期限制限があると思います。期限切れの Cookie は無効になるため、アクセスできません。

于 2010-12-20T16:57:52.417 に答える