会话超时问题

时间:2018-02-26 06:40:00

标签: c# asp.net-mvc web-config

我正在创建一个C#MVC5应用程序。我已经在web.config中提到会话超时为60分钟,但它没有工作,几分钟后会话中断。

以下是我在web.config中添加的代码:

<system.web>
    <sessionState mode="InProc" timeout="60"></sessionState>
    <httpRuntime targetFramework="4.5" maxRequestLength="25360" />
    <authentication mode="Forms">
        <forms loginUrl="~/Account/Login" timeout="2" />
    </authentication>    
    <!--<authentication mode="None" />-->
    <compilation debug="true" targetFramework="4.5" />
</system.web>

2 个答案:

答案 0 :(得分:0)

我认为你在这里误用了模式部分。

<system.web>
    <sessionState timeout="60"></sessionState>
</system.web>

有关详细信息,请参阅this answer

答案 1 :(得分:0)

在用户注销之前,有多种选项可以使会话处于活动状态。

超时=“60”或更高的值不是一个好方法,因为如果你的应用程序有很多活跃用户,它也会在用户关闭应用程序时将用户的会话存储60分钟。

<强>解决方案

您可以设置timeout =“10”并执行服务器命中(config-1中的超时值),只是告诉服务器您的用户仍然在这里。

该回调请求可以是 ajax 或带有元标记的 iframe

工作样本:

在您的MasterPage或HeaderControl上放置一个iframe,并将URL传递到您应用程序中的某个页面,并在该页面或控件上添加此元标记

<meta id="MetaRefresh" 
      http-equiv="refresh" 
      content="21600;url=KeepSessionAlive.aspx" 
      runat="server" />

或Ajax请求

setInterval(function () {
            if (localStorage.getItem("LastSessionHit") == '' || (((new Date - new Date(localStorage.getItem("LastSessionHit"))) / 1000 / 60) >= 9)) {
                $.ajax({ url: "KeepSessionAlive.aspx", }).done(function () {
                    $('#SessionLastHit').val(new Date);
                    localStorage.setItem("LastSessionHit", $('#SessionLastHit').val());
                    Console.log(err);
                }).error(function (err) {
                    Console.log(err);
                });
            }
        }, 60000);