20

クラスisPersistentで見つかったプロパティの目的を理解しようとしています。http://msdn.microsoft.com/en-us/library/kybcs83h.aspxFormsAuthenticationTicket

  1. isPersistent を設定するシナリオはありますか?
  2. isPersistentどのシナリオで、true と falseに設定したいですか?

Expiresブラウザ セッション間でユーザー認証 Cookie を永続化する唯一の方法は、チケットの作成後に作成される Cookieのプロパティを設定することであることがわかったため、このプロパティは冗長なようです。チケットの isPersistent 値が に設定されていてもfalse

isPersistentまた、チケットの有効期限 (Cookie ではなく)を true に設定して10 秒程度に設定しても、ほとんど効果がないこともわかりました。チケットは 10 秒後に期限切れになります。

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
    identity.Name,
    DateTime.Now,
    DateTime.Now.AddMinutes(FormsAuthentication.Timeout.TotalMinutes),
    isPersistent,
    JsonSerializerService.ToJson(identity),
    FormsAuthentication.FormsCookiePath);

string encryptedTicket = FormsAuthentication.Encrypt(ticket);

var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);

cookie.Path = FormsAuthentication.FormsCookiePath;

cookie.Expires = DateTime.Now.AddYears(1); // good for one year

上記のコードをオプションで設定できるように変更できることを感謝しますexpires

if (isPersistent)
    cookie.Expires = DateTime.Now.AddYears(1); // good for one year

サンプル アプリケーションは、@ GitHub で作成されています。https://github.com/chrismoutray/AuthSampleこれは基本的に、isPersistent フラグを true に設定しても、クロス ブラウザー認証が機能しないことを示しています。

4

1 に答える 1

10

フレームワーク 1.0/1.1 では、IsPersistent を true に設定すると、Cookie に 50 年の有効期限が設定されます。
バージョン 2.0 では、Cookie の有効期限がフォーム認証タイムアウト属性と一致するように変更されました。したがって、IsPersistent を true に設定できますが、フォーム認証のタイムアウト期間が過ぎると、Cookie は常に期限切れになります。
フォーム認証のタイムアウトを変更せずに長い有効期限が必要な場合、コードはトリックを行います。

編集: サンプルをダウンロードし、Cookie コードを次のように置き換えました

 FormsAuthentication.SetAuthCookie(model.UserName, true);

そして、期待どおりに機能しています。フォームのタイムアウトとして 2 日間が設定されているため、私の Cookie は 2 日で期限切れになります。

于 2012-04-27T07:57:18.083 に答える