gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:21:17 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com