Aspnet意外注销

时间:2014-10-09 11:47:32

标签: asp.net asp.net-mvc asp.net-mvc-5 logout

我正在使用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:本地一切正常。

2 个答案:

答案 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>

Machine Key Generator

答案 1 :(得分:2)

请延长您的应用程序池超时。它将解决问题,因为从发布配置,您的网站使用会话InProc模式,默认模式。

一旦应用程序被回收,存储在w3wp进程中的信息就会消失。

由于您使用的是云服务,因此您可能还需要检查负载平衡的工作原理。

如果他们没有使用粘性会话,那么最好将会话模式更改为StateServer或SQLMode。

希望它有所帮助。让我知道结果。感谢