c# - 为什么要使用 post 来保持 session 存活?

标签 c# jquery session

我正在使用 C# MVC 开发 Web 应用程序并使用 Session 在多个请求之间保留数据。

有时 session 超时,所以我想办法让它保持事件状态,并在 stackoverflow 中找到了一些解决方案。由于不愿意简单地将代码复制粘贴到我的项目中,我试图重写代码以满足我的需要并更好地理解它。

起初我尝试使用以下代码使 session 保持事件状态:

JS + jQuery - 客户端:

function keepAliveFunc(){
    setTimeout("keepAlive()", 300000);
};

function keepAlive() {
    $.get("/Account/KeepAlive", null, function () { keepAliveFunc(); });
};

$(keepAliveFunc());

C# - 服务器端:

[HttpGet]
public bool KeepAlive()
{
    return true;
}

但这似乎并没有让我的 session 保持事件状态,它正常过期。 经过一段时间的摆弄后,我将代码更改为:

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 保持事件状态。这就提出了一个问题:为什么我需要在试图让我的 Session 保持事件状态时使用 POST?有什么不同?我是否犯了其他我不理解的错误?

我一直在寻找答案,但我似乎找不到关于这个问题的任何答案,只是没有太多解释的解决方案。阅读 MSDN 上的 Session 也对我帮助不大。这让我得出结论,有一些与 Session 相关的“词”和这个我还没有遇到的特殊问题,这使我无法有效地谷歌搜索。

最佳答案

无论是 GET 还是 POST,浏览器都会随请求发送 SessionId cookie。因此,出于保持事件的目的,使用哪一个都无关紧要。由于您和“ping”服务器的时间间隔不同,您很可能会看到行为上的差异。

对于 GET 请求,您以 300000 毫秒的间隔执行,而对于 POST 请求,您以 10000 毫秒的间隔执行。

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

关于c# - 为什么要使用 post 来保持 session 存活?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35430918/

相关文章:

c# - 应用程序数据的常用存储位置在哪里

C# 移植到 Linux Mono 或 .NET Core

C# MySql funktion(输入命令字符串,返回 reader)

javascript - AJAX 最佳实践是什么?

php - 使用 PHP/jQuery 将从 mysql 中提取的每个单词的首字母大写

session - 如何使用 cookie 正确启动 session 、使用 Rack session 在 Sinatra 应用程序中存储和访问它

php - zend 框架 3 session 不工作

c# - 我误解了 PetaPoco.IgnoreAttribute 吗?

javascript - jQuery 之后的文本格式问题

php - 输入隐藏不能正常工作