【发布时间】:2016-05-27 15:14:50
【问题描述】:
我正在使用 C# MVC 开发一个 Web 应用程序,并使用 Session 在多个请求之间持久化数据。
有时会话超时,所以我想办法让它保持活力,并在 stackoverflow 中找到了一些解决方案。由于不愿意简单地将代码复制粘贴到我的项目中,我试图重写代码以满足我的需求并更好地理解它。
起初我尝试使用以下代码保持会话处于活动状态:
JS + jQuery - 客户端:
function keepAliveFunc(){
setTimeout("keepAlive()", 300000);
};
function keepAlive() {
$.get("/Account/KeepAlive", null, function () { keepAliveFunc(); });
};
$(keepAliveFunc());
C# - 服务器端:
[HttpGet]
public bool KeepAlive()
{
return true;
}
然而,这似乎并没有让我的会话保持活跃,它正常过期。 经过一段时间的摆弄,我将代码更改为:
JS + jQuery - 客户端:
function keepAliveFunc(){
setTimeout("keepAlive()", 10000);
};
function keepAlive() {
$.post("/Account/KeepAlive", null, function () { keepAliveFunc(); });
};
$(keepAliveFunc());
C# - 服务器端:
[HttpPost]
public JsonResult KeepAlive()
{
return new JsonResult { Data = "Success" };
}
后者运行良好,这让我得出的结论是,由于 POST 请求而不是 GET 请求,Session 保持活动状态。这就提出了一个问题:为什么在尝试保持会话活动时需要使用 POST?有什么不同?我是否犯了其他一些我不理解的错误?
我一直在寻找答案,但我似乎找不到任何关于这个问题的答案,只是没有太多解释的解决方案。阅读 MSDN 上的 Session 对我也没有多大帮助。这使我得出结论,有一些与 Session 相关的“单词”以及我尚未遇到的这个特殊问题,这使我无法有效地 google。
【问题讨论】:
-
据我了解,会话保持活动的持续时间与允许会话 cookie 存活的时间直接相关。我很确定,对于您使用的任何框架,您都可以简单地配置会话超时持续时间并将其增加到您喜欢的任何值。会话超时的原因是安全相关的,因此不是技术限制,因此您可以配置它。如果您只是将会话 cookie 配置为更长的寿命,则无需显式 ping 服务器来刷新会话 cookie 的超时时间。