C# Identity Framework用户间歇性注销

C# Identity Framework用户间歇性注销,c#,asp.net-mvc,authentication,iis,asp.net-identity,C#,Asp.net Mvc,Authentication,Iis,Asp.net Identity,我曾经遇到过这样的问题:用户有时会在到达超时之前就被登录,有时只是在登录后几分钟。在我们进入prod之前,它在较低的环境中运行良好。用户正在使用Citrix IE应用程序启动该网站。我正在使用ASP.NETMVC5和Identity Framework。下面是我如何设置auth cookie的: app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType = DefaultAuthent

我曾经遇到过这样的问题:用户有时会在到达超时之前就被登录,有时只是在登录后几分钟。在我们进入prod之前,它在较低的环境中运行良好。用户正在使用Citrix IE应用程序启动该网站。我正在使用ASP.NETMVC5和Identity Framework。下面是我如何设置auth cookie的:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
    LoginPath = new PathString("/Authentication/Index"),
    ExpireTimeSpan = TimeSpan.FromHours(4),
    SlidingExpiration = true,
    Provider = new CookieAuthenticationProvider()
    {
        OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
            TimeSpan.FromSeconds(5),
            (manager, user) => user.GenerateUserIdentityAsync(manager))
    }
});
app.UseCookieAuthentication(新的CookieAuthenticationOptions
{
AuthenticationType=DefaultAuthenticationTypes.ApplicationOkie,
LoginPath=新路径字符串(“/Authentication/Index”),
ExpireTimeSpan=时间跨度从小时(4)开始,
slidengexpiration=true,
Provider=新CookieAuthenticationProvider()
{
OnValidateIdentity=SecurityStampValidator.OnValidateIdentity(
时间跨度从秒(5),
(管理器,用户)=>user.GenerateUserIdentityAsync(管理器))
}
});
在web.config中,我将会话状态配置为InProc,超时时间为240分钟。IIS配置为仅在凌晨1点重新启动站点,并在工作进程空闲2小时时关闭工作进程。该站点托管在一台服务器上,可故障切换到辅助服务器。我已经在IIS日志中验证了我们从未访问过辅助服务器。我还打开了IIS回收的所有日志记录,以确保回收没有发生。我以前使用标准的authorizen属性,但现在继承它,以便在出现问题时提供一些日志记录。在我的日志中,我看到.AspNet.ApplicationCookie是在用户登录时创建的,但在出现错误时消失了,但我确实看到了其他Cookie

我在谷歌上搜索了几个小时,找不到任何匹配的东西。什么会导致此cookie被删除

编辑: 下面是web.config中的内容

<sessionState mode="InProc" customProvider="DefaultSessionProvider" timeout="240">


我打赌它是在进程设置中检查我的答案:@Hadee,我已经验证了应用程序池没有回收,我只访问了一台服务器。是否有其他原因设置机器键?根据您引用的MSDN,这些是MachineKey的默认值。如果我要在web.config中设置它,我不想生成一个吗?您不需要创建一个。一般来说就够了。但是,如果你想创建自己的链接,你可以使用我在答案末尾提供的两个链接。@Hadee,为什么这会改变任何事情?它没有改变任何值。我打赌它是在进程设置中检查我的答案:@Hadee,我已经验证了应用程序池没有回收,我只访问了一台服务器。是否有其他原因设置机器键?根据您引用的MSDN,这些是MachineKey的默认值。如果我要在web.config中设置它,我不想生成一个吗?您不需要创建一个。一般来说就够了。但是,如果你想创建自己的链接,你可以使用我在答案末尾提供的两个链接。@Hadee,为什么这会改变任何事情?它不会改变任何值。