我正在创建一个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>
答案 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);