c# - 表单例份验证 cookie 中的 ASP.NET MVC 用户数据与添加到 session

标签 c# asp.net-mvc authentication

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

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

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

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");

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

最佳答案

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

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

因此,归根结底,如果您决定使用 ASP.NET Session,您将不得不解决比最初更复杂的问题(这只是在所有请求中保留一些用户信息)。

关于c# - 表单例份验证 cookie 中的 ASP.NET MVC 用户数据与添加到 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15413108/

相关文章:

ASP.NET MVC 查看存储在数据存储中的信息

c# - Controller Action 中的 UrlHelper 未构建正确的 URL

c# - 防伪 token Web Api 2

ruby-on-rails - 将设计身份验证合并到现有的用户结构中?

c# - 应用程序在 Dispatcher.Invoke 后卡住

c# - 带有 DWM : how to handle WM_NCCALCSIZE correctly 的自定义窗框

c# - RSA 加密返回不同的输出

c# - Windows 7 中的扩展 dll 版本号

php - Prestashop Web 服务 API 不断要求身份验证

PHP:无法限制对页面的访问