3

私は PHP の専門家ですが、ASP.NET MVC4 でログイン ページを作成中です。セッション内のユーザーの ID、ユーザー名、およびロールを保存することを期待しています。これまでのところ、私がやっていることは次のとおりです。私が正しければ、ユーザー名で Cookie を保存します。

[HttpPost]
    public ActionResult Login(Models.UserLoginModel user)
    {
        if (ModelState.IsValid)
        {
            Models.User u = new Models.User();
            if (u.IsValid(user.Username, user.Password))
            {
                FormsAuthentication.SetAuthCookie(user.Username, user.RememberMe);

                return RedirectToAction("Index", "Accounts");
            }
            else
            {
                ModelState.AddModelError("", "Login data is incorrect!");
            }
        }
        return View(user);
    }

私の関心は、より多くの情報を保存し、検証時間を制御することです。私はアドバイスを受け、クラスを使用するように頼まれました。 FormAuthenticationTicketFormsAuthentication.SetAuthCookie(user.Username, user.RememberMe);

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket
(
    1, 
    user.Username, 
    DateTime.Now, 
    DateTime.Now.AddMinutes(30), 
    false, 
    "Some User Data", 
    FormsAuthentication.FormsCookiePath
);
Response.Cookies.Add
(
    new HttpCookie
    (
        FormsAuthentication.FormsCookieName, 
        FormsAuthentication.Encrypt(ticket)
    )
);

クールに見えますが、テストはしていませんが、柔軟性があります。しかし問題は、この情報をどのように受け取るかです。

これらの情報を取得して、ユーザーがログインしているかどうか、および .xml 内に保存されているその他の必要な情報を確認するにはどうすればよいですかFormsAuthenticationTicket

前もって感謝します。

4

1 に答える 1

5

他のチケットと同じように:

var cookie = Request.Cookies[FormsAuthentication.FormsCookieName];
var ticketInfo = FormsAuthentication.Decrypt(cookie.Value);

セキュリティ チケットなので、クライアント JavaScript からの情報にアクセスする必要がない場合は、HttpOnly も true に設定します。これは、Cookie がサーバー上でのみアクセス可能であることを意味します。

于 2013-01-28T14:53:14.997 に答える