每次请求都会重置会话超时

无论我们是否检查会话变量,会话超时是否会在每个请求上重置? 或者我们应该使用至少一个会话变量?

Ajax请求会导致重置会话超时吗? 比如Update PaneljQuery ajax ,…

谢谢


编辑1)

HTTP Get会导致重置会话超时吗?

是的,它确实。 是否实际使用Session无关紧要。
但是,如果您使用ajax调用,则可能会遇到一些问题。
(虽然我自己没有遇到过,但这是一个解释)

无论我们是否检查会话变量,会话超时是否会在每个请求上重置?

如果继续调用服务器端代码, Session将不会过期。 session超时将重置每个服务器请求。 在对同一网站的后续请求中,浏览器提供ASP.NET_SessionId Cookie ,服务器端模块使用该ASP.NET_SessionId Cookie来访问会话值(如用户信息)。

 --------------------------------------------------------------------------------- How to detect the Session TimeOut --------------------------------------------------------------------------------- 

在此处输入图像描述

 --------------------------------------------------------------------------------- 

问题2 – Ajax请求是否会导致重置会话超时? 比如Update Panel,jQuery ajax,…

问题 – 3 – HTTP Get会导致重置会话超时吗?

如果用户在请求之间等待太长时间, Session将过期。 如果继续调用server side代码, Session将不会过期。 session超时将在每个服务器请求时重置

 Web.Config  

无论我们是否检查会话变量,会话超时是否会在每个请求上重置? 或者我们应该使用至少一个会话变量?

在建立会话变量之前,会为每个回发生成新的会话ID。

Ajax请求会导致重置会话超时吗? 比如Update Panel,jQuery ajax,…

默认情况下保存在cookie中的会话ID是针对每个AJAX以及非AJAX请求发送的。 因此,服务器知道会话用户是活动的。 不要相信我的话。 在ie中使用fiddler或F12工具。 您可以看到每个AJAX GET / POST请求发送的cookie。

这取决于很多因素,所以我建议你进行如下测试。 只需不到5分钟的时间就可以了解您的确切情况是否适用于您的环境。 这是我用来测试这个的代码,我使用Telerik控件来测试这个想法,但我添加了一个.get来获得你想要的确切答案。 aspx页面有

                  
1

.cs页面有

 protected void Page_Load(object sender, EventArgs e) { Session.Timeout = 1; if (EMSG.CommonFunctions.GetSession("test").Length > 0) { this.lblAnswer.Text = "Session=" + EMSG.CommonFunctions.GetSession("test"); } else { this.lblAnswer.Text = "No session"; } } protected void btnTest_Click(object sender, EventArgs e) { Session["test"] = "variable set"; this.lblAnswer.Text = Session["test"].ToString(); } protected void btnFake_Click(object sender, EventArgs e) { lblAnswer.Text = "Ajax called."; } 

—您可以安排上述内容以适合您的情况。 但这个想法很简单。 您加载页面。 点击“续订”按钮,这将设置您的会话。 等待61秒,页面将刷新,会话变量消失。 再试一次,但这次在几秒钟后点击其他两个按钮之一,当页面刷新时,你会看到会话变量在ajax调用中保持不变。 在这种情况下,ajax调用会刷新会话变量。