1

在部署 asp.net mvc 3 项目时,我最近遇到了这个问题,我不知道它为什么会发生。

我有一个名为 LoginSesion 的类,当用户登录并存储在会话中时,它将获取经过身份验证的用户。

public static LoginSession AuthenticatedUser
    {
        get
        {
            if (HttpContext.Current.Session["LoginSession"] != null)
                return HttpContext.Current.Session["LoginSession"] as LoginSession;
            return null;
        }
        set
        {
            HttpContext.Current.Session["LoginSession"] = value;
        }
    }

当我运行项目时,尝试将用户重定向到特定的 URL(例如http://localhost/user/details/1), HttpContext.Current.Session["LoginSession"] 变为 Null 并将用户重定向回登录页面。

奇怪的是,这并不总是无效的,只是有时。当服务器运行太慢时,虽然会话尚未过期,但也会发生这种情况。

我在 web.config 中设置了会话超时,如下所示:

<authentication mode="Forms">
  <forms loginUrl="~/UserProfiles/Logon" timeout="2880" />
</authentication>

<sessionState mode="InProc" timeout="2880" />

我正在使用 IIS 7.x 进行发布和测试。

4

2 回答 2

2

您必须考虑以下事项:

1)sessionState timeout每次用户调用页面时都会更新(从0重新开始)。相比之下,form timeout每次用户调用页面时都会更新,并且至少有一半timeout(在您的情况下为 2880)被传递。这意味着,两个超时不同步。

2)注意Idle Time-outIIS应用程序池中的属性。大约是应用程序池回收的时间。这意味着会话变量会丢失。

于 2013-08-05T13:04:47.613 回答
-2

这就是您所需要的 - 将此代码添加到 web.config/system.web:

<machineKey validationKey="C5034160419189092507195D247C6FCD9F54D7A967372A23078E09F6440087328A874AD69955F441B526A265CC3A17CDEAAE8AB21A16868F549C3077C39C8E9F" decryptionKey="078FAD13FAC4E41EB0762F0B34E3F4990A144897C3387A70A746187F3AECD8DE" validation="SHA1" decryption="AES" />   

    <sessionState timeout="300" mode="InProc"></sessionState>

这个 machinKey 是从http://aspnetresources.com/tools/machineKey生成的

于 2014-01-19T02:02:32.603 回答