我正在使用aspnet mvc 5的项目中工作,并且在页面不活动5分钟后我们遇到意外注销的问题。
我在web.config中有这个:
<sessionState timeout="30"/>
<authentication mode="None"/>
您认为这对项目造成了什么影响?
如果需要更多信息,请询问。
感谢。
PS:我的AuthenticationType是ApplicationCookie
PS2:将机器密钥添加到web.config并在几分钟后仍然注销:
<machineKey validationKey="string" decryptionKey="otherstring" validation="SHA1" decryption="AES" />
PS3:本地一切正常。
答案 0 :(得分:4)
SessionState超时与登录超时没有任何关系。登录的用户信息存储在加密的cookie中。根据您所说的身份验证类型,您需要在StartUp
类中更改ASP身份的设置。
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
LogoutPath = new PathString("/Account/Logout"),
//Here is where you tell the system how long someone can stay logged in
//while being inactive.
ExpireTimeSpan = System.TimeSpan.FromMinutes(60),
SlidingExpiration = true,
CookieName = "LoginCookie"
});
修改强>
鉴于您正在托管云服务,您很可能不会坐在单个服务器上,而是将您的应用程序部署到负载均衡器后面的多个服务器,该负载均衡器将请求定向到多台计算机。如果不能保证在单个服务器上,则需要在web.config中定义MachineKey
。此密钥用于加密/解密LoginCookie
。如果未定义MachineKey
,IIS会启动一个。在多个服务器上时,每种服务器都有自己的MachineKey
。由于密钥不同,他们无法解密彼此的登录cookie,因此他们认为您没有登录。
<system.web>
<machineKey validationKey="BigLongNumber" decryptionKey="DifferentBigLongNumber"
validation="SHA1" decryption="AES" />
</system.web>
答案 1 :(得分:2)
请延长您的应用程序池超时。它将解决问题,因为从发布配置,您的网站使用会话InProc模式,默认模式。
一旦应用程序被回收,存储在w3wp进程中的信息就会消失。
由于您使用的是云服务,因此您可能还需要检查负载平衡的工作原理。
如果他们没有使用粘性会话,那么最好将会话模式更改为StateServer或SQLMode。
希望它有所帮助。让我知道结果。感谢