0

FormsAuthenticationTicketログインフォームには、ユーザーが Cookie に追加される新しいものを作成するチェックボックスをクリックできるようにするオプションがあります。

if (_model.RememberMe)
{

    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
                                      _model.Username,
                                      DateTime.Now,
                                      DateTime.Now.AddDays(30),
                                      true,
                                      _model.Username,
                                      FormsAuthentication.FormsCookiePath);

    // Encrypt the ticket.
    string encTicket = FormsAuthentication.Encrypt(ticket);

    // Create the cookie.
    Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));

上記のように、クライアントのブラウザに 30 日間保存されることを願っています。

これをテストして、現在のセッション タイムアウトを意図的に 1 分間だけ残しました

<sessionState timeout="1"></sessionState>

そのため、1 分後にユーザーが「remember me」と言った場合、Web サイトがログイン ページにリダイレクトされないようにする必要があります。しかし、そうです。これはそれを行うコードです。

        // [".ASPXAUTH"] is the cookie name that is created by the FormsAuthenticationTicket`
        if (User.Identity.Name == "" && Request.Cookies[".ASPXAUTH"] == null)
        {

            return RedirectToAction("LogOut", "Login");
        }


        // the current session hasn't timed out or the remember me cookie is enabled
        FormsIdentity id = (FormsIdentity)User.Identity;
        FormsAuthenticationTicket ticket = id.Ticket;

しかし、クッキーは NULL です。

私に代わって誤解していると予想しているので、誰かが私に手を差し伸べることができれば. 私は非常に感謝されます。

ありがとう

4

1 に答える 1

0

あなたが探しているのは

string mySessionCookie = System.Web.HttpContext.Current.Request.Headers["Cookie"];
if (mySessionCookie.IndexOf(".ASPXAUTH", StringComparison.Ordinal) >= 0) {
    // do something
}

編集

これはどうですか、テストしていませんが、以前にこのようなことをしたことを覚えています

HttpCookie cookie = (HttpCookie)(Request.Cookies[FormsAuthentication.FormsCookieName]);
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);
于 2014-12-23T09:13:30.743 に答える