6

私は ASP.NET MVC を使用しており、誰かがサイトに戻ったときに自動的にログインできるようにしたいと考えています (このサイトとまったく同じ方法で)。

ユーザーが最初に登録またはログインするときに、Cookie を次のように設定します。

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
    1,
    "playerid",
    DateTime.Now, 
    DateTime.Now.AddMinutes(1), //This will be set to a longer period in live...
    true, 
    Username + "|" + item.PlayerID.ToString(), 
    FormsAuthentication.FormsCookiePath);

string encTicket = FormsAuthentication.Encrypt(ticket);
Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));

ユーザーとしてログインしてこれをテストし、Cookiesタブを確認するとFirebug、有効期限が に設定されていSessionます。ブラウザーを閉じてから自分のサイトに戻ると、ログインしていません。これは、ブラウザーを閉じるとセッションが終了することを期待するものです (しかし、これは私が望んでいることではありません!)。

ただし、ログインしてサイトをナビゲートすると、1 分が経過すると有効期限Sessionが表示されなくなり、実際の日付スタンプとして表示されます。その後ブラウザを閉じて自分のサイトに戻ると、自動ログインされます。

要約すると、私の有効期限は、Session私が規定した実際の有効期限 (この場合は t + 1 分) までに設定されており、サイトでアクティブになっているようです (スライド有効期限を使用しています)。

有効期限を FormsAuthentication チケットに記載されているものに設定する方法はありますか (および として表示されませんSession)?

4

1 に答える 1

9

プロパティpersistent cookieを設定して、クライアントのハードドライブに保存される を作成する必要があります。Expires

var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket)
{
    // setting the Expires property to the same value in the future
    // as the forms authentication ticket validity
    Expires = ticket.Expiration
};
Response.Cookies.Add(cookie);

Cookie とフォーム認証チケットに同じ有効期限タイムアウトを指定したことを確認してください。FireBug を見ると、Cookie が発行されたときにExpiresプロパティが設定されていることがわかります。これにより、Cookie が永続化し、ブラウザの再起動後も存続します。

Set-Cookie: ASPXAUTH=...; Expires=Tue, 15-Jan-2014 21:47:38 GMT; Path=/; HttpOnly
于 2013-02-17T14:28:50.973 に答える