2012-04-29 57 views
16

會話超時重置在每個請求上,無論我們檢查會話變量嗎?或者我們應該使用至少一個會話變量?會話超時重置在每個請求

Ajax請求是否導致重置會話超時?像Update PaneljQuery ajax,...

感謝


編輯1)

是否HTTP Get原因重置會話超時?

+0

我提出了這個問題:http://stackoverflow.com/questions/10432428/session-timeout-on-sqlserver-mode-inside-ajax-updatepanel – 2012-05-04 09:28:12

+3

在ie中使用fiddler或f12。你會看到所有的cookie(包括會話cookie)甚至會被髮送AJAX調用。所以服務器知道這個活動。長話短說,ajax或沒有ajax,會話得到擴展與用戶活動。 – Arcturus 2012-05-08 21:10:56

回答

10

是的,它的確如此。不管你是否實際使用Session
但是,如果您僅使用 ajax調用,則可能會遇到一些問題。
(雖然我還沒有遇到過它自己,here的解釋)在每次請求

+0

你能詳細說明你不確定的內容嗎?正如我所說,我以前從未遇到過這種行爲,所以我自己也不是100%。但是,構建發送AJAX請求的小測試網頁並查看會話是否保持活動狀態應該沒有問題。 – 2012-04-29 10:57:10

+1

即使只使用ajax調用,也沒有問題。 – Arcturus 2012-05-08 21:05:11

17

不會話超時復位無論我們 檢查會話變量?

Session如果您不斷致電服務器端代碼,則不會過期。 session超時將重置每個請求到服務器。在隨後對同一網站的請求中,瀏覽器提供服務器端模塊用於訪問會話值(如用戶信息)的ASP.NET_SessionId Cookie

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

enter image description here

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

問題 - 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" /> 
+2

我想'如果你繼續調用服務器端代碼'語句不會過期,會話將不會過期。我有一個帶有'Update Panel'和一個按鈕的簡單頁面,每2分鐘點擊一下按鈕,會話在20分鐘後過期 – Arian 2012-05-03 18:42:42

+0

@Kerezo - 我在我的'Web.config'中有Session'Timeout = 1'。我的表單中有相同數量的控件。每15秒後我按一下按鈕,並繼續處理直到3分鐘。 – Pankaj 2012-05-03 18:55:11

+0

你的會話是「CookieLess」嗎? – Arian 2012-05-03 18:59:04

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調用會刷新會話變量。

4

無論我們檢查會話變量是否對每個請求都重置會話超時?或者我們應該使用至少一個會話變量?

在建立會話變量之前,每個回發都會生成一個新的會話ID。

Ajax請求是否導致重置會話超時?像更新面板,jQuery ajax,...

默認保存在Cookie中的會話ID將發送給每個AJAX以及非AJAX請求。因此,服務器知道會話用戶處於活動狀態。不要聽我的話。在ie中使用fiddler或F12工具。您可以看到每個AJAX GET/POST請求發送的Cookie。

+0

如果'Cookiless'設置爲false,則您的場景正確 – Arian 2012-05-09 07:19:43

相關問題