ASP.NET MVC会员身份验证 - 用户经常被注销 - 不知道原因

8
我有一个ASP.NET MVC 4 Web应用程序。在本地运行时,它可以正常工作,但在Web主机(使用共享托管)上,经常会将已登录的用户重定向回主页而注销。在大多数情况下,用户只需执行几个操作就被注销了。
Web主机建议我的应用程序可能使用了过多的内存,但我使用了一个程序来分析内存使用情况,并确认它并没有使用过多的内存 - 实际上,该应用程序似乎只使用了Web主机上分配的内存的一小部分。
以下是使用的登录方法:
    public static Boolean Login(string Username, string Password, bool persistCookie  = false)
    {

        bool success = Membership.ValidateUser(Username, Password);
        if (success)
        {
            FormsAuthentication.SetAuthCookie(Username, persistCookie);
        }
        return success;
    }

在我的网络主机上,表单验证超时设置为60分钟,那么这应该不会成为一个问题,对吗?

<authentication mode="Forms">
  <forms loginUrl="~/Account/Login" timeout="60" />
</authentication>

我的会话状态超时值也设置为60分钟:

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

根据这里的答案 (链接),我还添加了这一行代码,但似乎并没有解决问题:

<machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps"></machineKey>

有什么想法可以解决这个问题吗?我该如何解决它?

2个回答

2

您的会话没有超时。IIS崩溃了。由于您正在使用内存中的会话,每次IIS崩溃时,您的会话都会消失,用户被注销。您应该检查服务器的事件视图,并查看错误详细信息以找出错误原因。


0

我在 web.config 的身份验证超时中将超时时间设置为 2880,同时在关闭 system.web 前也设置了 sessionState。

<sessionState timeout="1440"></sessionState>

这将保持会话活动状态长达24小时。


3
目前我两个设置都是60,我知道这意味着60分钟,应该足够的时间。我将超时值增加到一个更大的数字,看看是否会有任何不同......但实际上并没有。 - Ciaran Gallagher
它会在多长时间内超时,或者它似乎来自特定的页面或控制器? - PW Kad
我会说,用户会话的有效期不超过1到2分钟...有时更长,有时更短。似乎调用哪个控制器并不重要。 - Ciaran Gallagher
这与system.webauthentication子标签下的forms标签上的timeout属性有何不同? - ashes999
https://dev59.com/N3M_5IYBdhLWcg3wPAZF - PW Kad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接