8

ASP.NET フォーム認証がどのように機能するかを誰かに説明してもらえますか?

現状では、ユーザー名、パスワード、および「サインインしたままにする」チェックボックスがあります。これらの値から、次のようにチケットと Cookie を作成しています。

    // Create ticket
    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,email,DateTime.UtcNow,DateTime.UtcNow.AddMinutes(30),remember,String.Empty);

    // Encrypt ticket
    string cookie_contents = FormsAuthentication.Encrypt(ticket);

    // Create cookie
    HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName,cookie_contents);

    if (remember) {
        cookie.Expires = DateTime.UtcNow.AddDays(90);
    }

    cookie.Path = FormsAuthentication.FormsCookiePath;
    cookie.Secure = true;

    // Add cookie to response
    Response.Cookies.Add(cookie); 

このコードを使用して、自分の Web サイトにサインインできることを期待し、「サインインしたままにする」をオンにすると、少なくとも 90 日間サインインしたままになりますか?

しかし、私が見ているのは、最初のログインから少なくとも 30 分後にサインアウトされていることです (これは、チケットのために確保された時間ですか?)。

Cookie の有効期限とチケットの有効期限の違いと、署名を保持する方法を教えてください。Cookie とチケットの両方に 90 日間を設定する必要がありますか?

4

1 に答える 1

24

回避できる場合は、Cookie を直接操作しないでください。ユーザーのサインインに使用できますFormsAuthentication.SetAuthCookie(username, persistent)。ここでの永続的とは、「セッション Cookie を使用しない」ことを意味します。

次に、web.config で Cookie の有効期限を指定する必要があります。

 <system.web>
   <authentication mode="Forms">
             <forms timeout="50000000" slidingExpiration="true"/>
   </authentication>
 </system.web>

ここで、スライド有効期限は、リクエストごとに Cookie が更新されることを意味します。タイムアウトは分単位なので、例はかなり高いです:)

この質問と Scott Gu のブログへのリンクを見てください: Forms Authentication Cookie Expiration

于 2012-11-13T22:49:11.297 に答える