Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC对用户的处理_C#_Asp.net_Asp.net Mvc_Asp.net Membership - Fatal编程技术网

C# ASP.NET MVC对用户的处理

C# ASP.NET MVC对用户的处理,c#,asp.net,asp.net-mvc,asp.net-membership,C#,Asp.net,Asp.net Mvc,Asp.net Membership,你好, 我的ASP.NET MVC页面中的登录方法如下所示: Check ModelState Check Username and password user = accountModel.GetUser(model.UserName); this.HttpContext.Session[Biss.Extensions.SessionKey.userContext.ToString()] = new UserContext() { SiteRole = (SiteRoles)user.Role

你好,

我的ASP.NET MVC页面中的登录方法如下所示:

Check ModelState
Check Username and password
user = accountModel.GetUser(model.UserName);
this.HttpContext.Session[Biss.Extensions.SessionKey.userContext.ToString()] = new UserContext() { SiteRole = (SiteRoles)user.RoleId, Id = user.Id };
FormsAuthentication.SetAuthCookie(model.UserName, createPersistentCookie);
在开发和重建过程中,多次重新启动解决方案,我注意到以下几点:

  • 启动网站
  • 登录(使用上述方法)
  • 重建灵魂
  • 重新启动网站
  • 现在仍将设置User.Identity.Name,但

    HttpContext.Session[Biss.Extensions.SessionKey.userContext.ToString()]
    
    是空的吗?我假设在进行重建/重新启动时网站正在重新启动,但如何设置User.Identity.Name?我该怎么办


    最佳问候

    重新启动网站时,您会刷新会话。会话状态已完全消失

    我建议不要在用户登录这样的简单场景中使用会话。我的一般回答几乎无处不在——如果你有非常严肃的理由,一定要使用会话


    您可以将有关用户的信息保留在数据库中,并按实际需要读取。

    由于您正在重新启动AppDomain,会话将被删除,因为它存储在内存中。想象一下,在您的生产服务器中可能会发生完全相同的事情。在某些情况下,IIS可以简单地重新启动应用程序池:例如,在达到某个不活动或内存/CPU阈值后。为了避免丢失会话数据,您可以使用进程外会话存储,这样它就不会留在内存中。查看以下文章,了解不同的可能性:

    您是否也重新启动浏览器?或者它可能正在向应用程序传递某种陈旧的cookie吗?@MerlynMorgan Graham>不,我没有重新启动浏览器,我希望会员确实为此使用了某种cookie?以前没有调试过这样的问题,所以我很高兴不知道这个问题的答案:)但这将是需要检查的。但是这些信息可以在不同的方法中使用多次,我希望我可以在不同的方法之间传递用户信息?这真的是一个更好的解决方案吗?也许用一个带有用户信息的Singleton可能是一个更好的方法?它比会话更好。如果你需要几个地方,考虑创建一个MVC过滤器,可以读取信息并做一些事情。例如,根据用户角色等允许/禁止访问操作。无单音,plz。它们的破坏方式与您重启应用程序的方式完全相同;>是的,如果我没有阅读userdata,如果它还没有就位,我会这样做。因此,当检查Singleton时,如果没有存储数据,我将进行读取。这意味着,如果服务是循环使用的,我们将在循环使用singelton后的第一时间读回数据。