我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>
我在global.asax.cs文件中有一个类似的问题可以解决此问题:如果会话为空并且请求已通过身份验证,它将强制注销。(将您的会话值之一始终设置为检查空值)
protected void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{
ForceLogoutIfSessionExpired();
}
private void ForceLogoutIfSessionExpired()
{
if (Context.Handler is IRequiresSessionState)
{
if (Request.IsAuthenticated)
{
if (HttpContext.Current.Session["name"] == null)
{
AuthenticationHandler.SignOut(Response);
Response.Redirect(FormsAuthentication.LoginUrl, true);
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句