【发布时间】:2014-11-03 13:22:34
【问题描述】:
我在我的应用程序中使用Session 来存储一些数据,例如用户名(写你好,...)等等。另外,我使用FormsAuthentication 来验证用户,所以控制器有这样的代码:
protected void SetAuthCookie(int userId)
{
FormsAuthentication.SetAuthCookie(userId.ToString(), true);
User user = Repositories.UserRepository.GetUserById(userId);
Session["name"] = user.Name;
Session["email"] = user.Email;
Session["balance"] = user.TotalBalance + " / " + user.ActiveBalance;
Session["isConfirmed"] = user.IsConfirmed;
Session["phone"] = user.Phone;
}
所以,当我在一些代码更改后重新启动应用程序时,会话数据被破坏,但用户仍然经过身份验证,所以我的情况非常糟糕,我想修复它。一方面,我可以在某处创建代码,检查会话数据是否正常,否则刷新。另一方面,我可能会错过一些以正确方式存储这些数据的技术吗?
在这种情况下最好的解决方案是什么?
<sessionState mode="InProc" customProvider="DefaultSessionProvider">
<providers>
<add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />
</providers>
</sessionState>
【问题讨论】:
-
cookies 在会话中持续存在。这里有什么问题?当您检测到 cookie 时,设置会话值。
-
另外,不建议在 MVC 中使用会话。 MVC 旨在尽可能地无状态,而依赖会话会破坏这一点。
-
有时,用户已通过身份验证,但会话数据不再存在。发生这种情况,当我在代码更改后重新启动应用程序时,我担心在其他情况下会出现这种情况
-
如果会话是
inProc,它会在您回收应用程序池时被销毁,当您更新 web.config 或重建(部署新程序集)时会发生这种情况。 -
问题出在代码中,而不是身份验证的工作方式。不要试图“修复”没有损坏的东西。您的代码假定只有未经身份验证的用户才会访问您的网站,这显然是错误的。如果你发现它是空的,你可以检查 Session 对象并重新填充它。
标签: c# asp.net asp.net-mvc session