會話超時重置在每個請求上,無論我們檢查會話變量嗎?或者我們應該使用至少一個會話變量?會話超時重置在每個請求
Ajax請求是否導致重置會話超時?像Update Panel
,jQuery ajax
,...
感謝
編輯1)
是否HTTP Get
原因重置會話超時?
會話超時重置在每個請求上,無論我們檢查會話變量嗎?或者我們應該使用至少一個會話變量?會話超時重置在每個請求
Ajax請求是否導致重置會話超時?像Update Panel
,jQuery ajax
,...
感謝
編輯1)
是否HTTP Get
原因重置會話超時?
不會話超時復位無論我們 檢查會話變量?
Session
如果您不斷致電服務器端代碼,則不會過期。 session
超時將重置每個請求到服務器。在隨後對同一網站的請求中,瀏覽器提供服務器端模塊用於訪問會話值(如用戶信息)的ASP.NET_SessionId Cookie
。
---------------------------------------------------------------------------------
How to detect the Session TimeOut
---------------------------------------------------------------------------------
---------------------------------------------------------------------------------
問題 - 2 - 是否Ajax請求的原因重置會話超時?像更新面板 ,jQuery ajax,...
問題-3 - 是否HTTP獲取會導致重置會話超時?
Session
將在用戶在請求之間等待時間過長的情況下到期。如果您繼續撥打server side
代碼,則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" />
這將取決於很多因素,所以我建議你運行像下面的測試。真正花費不到5分鐘的時間才能確定您的確切情況是否適用於您的環境。 這是我用來測試這個的代碼,我使用Telerik控件來測試這個想法,但我添加了一個.get來獲得你想要的確切答案。 aspx頁面有
<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.";
}
---你可以安排上述以適應你的情況。但這個想法很簡單。 您加載頁面。點擊「更新」按鈕,這將設置您的會話。等待61秒,頁面將刷新,會話變量消失。再試一次,但這次在幾秒鐘後點擊另外兩個按鈕中的一個,當頁面刷新時,你會看到session變量保持不受ajax調用的影響。 在這種情況下,ajax調用會刷新會話變量。
無論我們檢查會話變量是否對每個請求都重置會話超時?或者我們應該使用至少一個會話變量?
在建立會話變量之前,每個回發都會生成一個新的會話ID。
Ajax請求是否導致重置會話超時?像更新面板,jQuery ajax,...
默認保存在Cookie中的會話ID將發送給每個AJAX以及非AJAX請求。因此,服務器知道會話用戶處於活動狀態。不要聽我的話。在ie中使用fiddler或F12工具。您可以看到每個AJAX GET/POST請求發送的Cookie。
如果'Cookiless'設置爲false,則您的場景正確 – Arian 2012-05-09 07:19:43
我提出了這個問題:http://stackoverflow.com/questions/10432428/session-timeout-on-sqlserver-mode-inside-ajax-updatepanel – 2012-05-04 09:28:12
在ie中使用fiddler或f12。你會看到所有的cookie(包括會話cookie)甚至會被髮送AJAX調用。所以服務器知道這個活動。長話短說,ajax或沒有ajax,會話得到擴展與用戶活動。 – Arcturus 2012-05-08 21:10:56