为什么要使用帖子来保持会话活跃?

时间:2016-02-16 11:08:33

标签: c# jquery session

我正在使用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相关的“单词”和我尚未遇到的这个问题,这使我无法有效地进行谷歌。

1 个答案:

答案 0 :(得分:4)

使用GET或POST,浏览器会发送带有请求的SessionId cookie。因此,为了保持活力,使用哪一个并不重要。很可能你会看到行为上的差异,因为你和服务器“ping”的间隔不同。

使用GET请求时,您以300000毫秒的间隔执行此操作,而使用POST请求则以10000毫秒的间隔执行此操作。

最有可能的是,服务器的会话生命周期介于两个值之间。 但是,您可以配置会话生命周期以满足您的需求(如增加它),但请记住,到期会话是一个安全功能,因此请尝试找到一个足够大的小值,以使您的应用程序正常工作,但仍允许会话在安全的时间间隔内到期。