7

我想我有一个关于 asp.net mvc 4 中的身份验证的简单问题。我不清楚的一件事是我可以将用户数据添加/序列化到授权 cookie 中。将用户数据放入身份验证 cookie 与将用户数据添加到会话中有何好处/权衡?我什至需要在身份验证 cookie 中添加用户独有的任何内容吗?我应该序列化所有用户数据并将其放入 cookie 中,而不是使用会话来存储用户数据吗?

我的应用程序非常简单,没有任何角色。我只是想确保它在必要时能够很好地扩展。

现在,我只是将用户电子邮件放入身份验证 cookie 并将用户对象添加到会话中。我正在使用以下代码来授权用户:

FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
      1,
      user.Email,
      DateTime.Now,
      DateTime.Now.AddMinutes(15),
      false,
      user.Email); // adding the user email in the authTicket
string encTicket = FormsAuthentication.Encrypt(authTicket);
HttpCookie faCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
Session["User"] = user; //adding user data to session
Response.Cookies.Add(faCookie);

return RedirectToAction("Summary", "Account");

我真的很感激任何见解。谢谢!

4

2 回答 2

12

ASP.NET 会话的问题在于默认情况下它存储在内存中。这意味着,如果您在网络场中运行,则需要为会话使用进程外持久性,否则并非网络场中的所有节点都具有相同的信息。因此,您需要将会话持久化在 SQL Server 中,这比简单地从表单身份验证 cookie 中读取用户数据要昂贵得多。

关于 ASP.NET Session 的另一个重要方面是,如果您决定使用它(我个人从不使用它),您必须确保它的超时与您的表单身份验证 cookie 超时相同,否则您的 cookie 可能会过期但用户数据仍然存在于会话中或更糟糕的是,会话可能会过期,但表单身份验证 cookie 仍然有效。

因此,归根结底,如果您决定使用 ASP.NET 会话,那么您将不得不解决比最初更复杂的问题(即在所有请求中简单地保留一些用户信息)。

于 2013-03-14T15:18:55.927 回答
0

要考虑的另一件事是使用 Profile。可在 HttpContext.Profile 视图中获取http://msdn.microsoft.com/en-us/library/ewfkf772%28v=vs.100%29.aspx

于 2014-04-18T22:20:50.217 回答