0

ログイン システムにメンバーシップ API を使用していますが、奇妙なことに悩まされています。ユーザーが「Remember Me」するかどうかを選択できるようにします。これは、有効期限が 1 か月の永続的な Cookie を作成するかどうかを意味します。

Web.config で、次のように書きました。

<authentication mode="Forms">
  <forms timeout="60"  />
</authentication>

これは、60 分のデフォルトのセッション Cookie であると想定されています。

ログインページのコードビハインド:

if(Membership.ValidateUser(UsernameTextBox.Text, PasswordTextBox.Text))
        {
            authCookie = FormsAuthentication.GetAuthCookie(UsernameTextBox.Text, RememberMeCheckBox.Checked);
            if(RememberMeCheckBox.Checked)
                authCookie.Expires = DateTime.Now.AddMonths(1);
            Response.Cookies.Add(authCookie);
            Response.Redirect(FormsAuthentication.GetRedirectUrl(UsernameTextBox.Text, RememberMeCheckBox.Checked));
        }

しかし、結果は奇妙です。60分間の永続的なクッキーを作成したようです! これはどのように可能ですか?

4

1 に答える 1

2

Cookie の有効期限を 1 か月に設定していますが、含まれている認証チケットは変更されていません。Web 構成から 60 分のデフォルト値を継承しています。

おそらく、Cookie の有効期限を認証チケットの有効期限と同期させるか、Cookie の有効期限を非常に長く設定する必要があります。

あなたがする必要があるのは

  1. FormsAuthenticationTicket インスタンスを手動で作成し、インスタンスの Expiration プロパティを設定します。

  2. FormsAuthentication.Encrypt()を使用してチケットを暗号化する

  3. チケットを含む Response.Cookies コレクションに Cookie を手動で追加します。(代わりに、web.config 設定を使用する get/setAuthCookie() を使用します)。

FormsAuthentication.Encrypt()のドキュメントにいくつかのサンプル コードがあります。

于 2012-08-24T07:25:55.917 に答える