无论我们是否检查会话变量,每次请求是否重置会话超时?或者我们应该使用至少一个会话变量?
像 Update Panel
,jQuery ajax
这样的Ajax请求是否会导致重置会话超时?
谢谢。
编辑1)
HTTP Get
是否会导致重置会话超时?
无论我们是否检查会话变量,每次请求是否重置会话超时?或者我们应该使用至少一个会话变量?
像 Update Panel
,jQuery ajax
这样的Ajax请求是否会导致重置会话超时?
谢谢。
编辑1)
HTTP Get
是否会导致重置会话超时?
无论我们是否检查会话变量,每个请求都会重置会话超时吗?
如果您不停地调用服务器端代码,则会话不会过期。会话超时将在每个请求到服务器时重置。在对同一网站进行后续请求时,浏览器提供ASP.NET_SessionId Cookie
,服务器端模块使用该Cookie访问会话值(例如用户信息)。
---------------------------------------------------------------------------------
How to detect the Session TimeOut
---------------------------------------------------------------------------------
---------------------------------------------------------------------------------
问题2 - Ajax请求会导致重置会话超时吗?例如Update Panel,jQuery ajax等。
问题3 - HTTP Get会导致重置会话超时吗?
Session
在用户请求之间的等待时间过长时会过期。如果您不断调用 服务器端
代码,则 Session
将不会过期。每次向服务器发送请求时,Session
超时将被重置。
Web.Config
<sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="true" timeout="1" />
Web.config
中Session Timeout = 1
。我的表单中有相同数量的控件。我每15秒按一次按钮,处理过程持续3分钟。 - PankajCookieless=true
所以你的 session 没有过期。 - Arian是的,它会影响。无论您是否实际使用Session
都没关系。
但是,如果您仅仅使用ajax调用,可能会遇到一些问题。
(虽然我自己没有遇到过,这里有一个解释)
无论我们是否检查会话变量,会话超时时间每次请求都会重置吗?还是我们应该至少使用一个会话变量?
在建立会话变量之前,每次提交后端都会生成一个新的会话ID。
像Update Panel、jQuery ajax等,Ajax请求会导致重置会话超时时间吗?
默认情况下,保存在cookie中的会话ID将被发送到每个AJAX和非AJAX请求。因此,服务器知道会话用户处于活动状态。不要只听我的。可以使用Fiddler或IE中的F12工具来查看每个AJAX GET / POST请求发送的Cookie。
<telerik:RadScriptManager ID="RadScriptManager1" Runat="server">
</telerik:RadScriptManager>
<telerik:RadAjaxManager ID="ram" runat="server">
<AjaxSettings>
<telerik:AjaxSetting AjaxControlID="btnFake">
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID="lblAnswer" />
</UpdatedControls>
</telerik:AjaxSetting>
</AjaxSettings>
</telerik:RadAjaxManager>
<script src="Scripts/jquery-1.4.1-vsdoc.js"></script>
<script>
$(document).ready(function () {
setTimeout(function () { document.location.href = "default.aspx?next"; }, 61000);
setInterval(function () {
var divForTimer = $("#divTime");
var secs = parseInt(divForTimer.html());
secs = secs + 1;
$("#divTime").html(secs.toString());
}, 1000);
});
function getPage() {
$.get("test.aspx", function(result) {
$("#btnFake").val("Got it");
});
}
</script>
<asp:Label ID="lblAnswer" runat="server"></asp:Label>
<Asp:button ID="btnTest" runat="server" Text="Renew" onclick="btnTest_Click" />
<input type="button" ID="btnAjaxget" onclick ="getPage()" value="Ajax get" />
<asp:Button ID="btnFake" runat="server" Text ="Fake it"
onclick="btnFake_Click"/>
<div id="divTime">1</div>
.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.";
}
---您可以根据自己的情况进行安排。但是这个想法很简单。 您加载页面后,点击“Renew”按钮,这将设置您的会话。等待61秒,页面将刷新,会话变量消失。再试一次,但这次在几秒钟后点击另外两个按钮之一,在页面刷新时,您将看到会话变量已经从ajax调用中保持完好。 在这种情况下,ajax调用刷新了会话变量。