7

ASP.NET ログイン コントロールを使用しています。フォーム認証のタイムアウトを (web.config でグローバルに設定するのではなく) ユーザーごとに個別に設定できるようにしたいと考えています。私が理解していることから、これを行う唯一の方法は、AuthenticationTicket でタイムアウトを手動で設定することです。ログイン コントロールを使用するときにこれを行う方法はありますか? ログイン コントロールがこれらすべてを抽象化しているように思えます。ログイン コントロールを引き続き使用する方法があることを期待していますが、ユーザーごとに FormsAuthentication タイムアウトを個別に設定することもできます。

ありがとう、コーリー

4

2 に答える 2

7

MSDNは次のように述べています

LoggedIn イベントは、認証プロバイダーがユーザーの資格情報を確認した後に発生し、認証 Cookie は次の応答でブラウザーに送信するためにキューに入れられます。LoggedIn イベントを使用して、ユーザーが認証された後に、ユーザーごとのデータへのアクセスなどの追加処理を提供します。

したがって、このイベントは Cookie を置き換えるのに適した場所のようです。まず、Cookie を取得して復号化する必要があります。

HttpCookie authCookie = Response.Cookies[FormsAuthentication.FormsCookieName];
FormsAuthenticationTicket oldAuthTicket = 
    FormsAuthentication.Decrypt(authCookie.Value);

この直後に、抽出したばかりに基づく新しい認証チケットを作成する必要があります。

FormsAuthenticationTicket newAuthTicket = new FormsAuthenticationTicket(
    oldAuthTicket.Version,
    oldAuthTicket.Name,
    DateTime.Now,
    DateTime.Now.Add(timeoutForUser),
    oldAuthTicket.IsPersistent,
    oldAuthTicket.UserData,
    FormsAuthentication.FormsCookiePath
);

timeoutForUserこれはTimeSpan、ユーザーのセッション タイムアウトを保持する値です。

最後に、応答の古い Cookie を新しい Cookie に置き換える必要があります。

string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
authCookie = 
    new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
HttpContext.Current.Response.Cookies.Set(authCookie);

これでうまくいくはずです。

于 2011-03-11T20:23:58.237 に答える
2

ログイン コントロールには、認証を自分で処理するために使用できるイベントがLoggingInあります。LoggedIn

LoggingIn設定によりイベントでのログイン処理をキャンセルし、e.Cancel = Truenew を使用して手動でチケットを作成できます。new FormsAuthenticationTicket(...)

于 2011-03-11T19:53:27.557 に答える