2012-04-29 34 views
16

Cài lại thời gian chờ của phiên trên mỗi yêu cầu bất kể chúng tôi có kiểm tra các biến phiên không? Hoặc chúng ta nên sử dụng ít nhất một biến phiên?Cài đặt hết thời gian chờ của phiên trên mỗi yêu cầu

Yêu cầu Ajax có gây ra đặt lại thời gian chờ của phiên không? như Update Panel, jQuery ajax ...

nhờ


Sửa 1)

Liệu HTTP Get nguyên nhân đặt thời gian chờ phiên ??

+0

Tôi nêu câu hỏi này: http: //stackoverflow.com/questions/10432428/session-timeout-on-sqlserver-mode-inside-ajax-updatepanel –

+3

Sử dụng fiddler hoặc f12 trong ví dụ. Bạn sẽ thấy rằng tất cả các cookie (bao gồm cả cookie phiên) được gửi ngay cả các cuộc gọi AJAX. Vì vậy, máy chủ nhận thức được hoạt động. Câu chuyện dài ngắn, ajax hoặc không ajax, phiên được mở rộng với hoạt động của người dùng. – Arcturus

Trả lời

10

vâng, có. nó không quan trọng cho dù bạn thực sự sử dụng Session hay không.
Tuy nhiên, nếu bạn đang sử dụng chỉ cuộc gọi ajax, bạn có thể gặp phải một số sự cố.
(mặc dù tôi đã không gặp nó bản thân mình, here 's một lời giải thích)

+0

Bạn có thể xây dựng những gì bạn không chắc chắn về? như tôi đã nói, tôi chưa bao giờ gặp phải hành vi này trước đây, vì vậy tôi không phải 100% bản thân mình. Tuy nhiên, nó không phải là vấn đề để xây dựng một trang web thử nghiệm nhỏ mà gửi yêu cầu AJAX, và xem liệu phiên được giữ sống hay không. –

+1

Ngay cả khi bạn chỉ sử dụng các cuộc gọi ajax, không có vấn đề gì. – Arcturus

17

Liệu phiên reset thời gian chờ trên mọi yêu cầu bất kể chúng ta kiểm tra phiên biến?

Session sẽ không hết hạn nếu bạn tiếp tục gọi mã phía máy chủ. Thời gian chờ session sẽ được đặt lại trên mỗi yêu cầu đối với máy chủ. Trên các yêu cầu tiếp theo đến cùng một trang web, trình duyệt cung cấp ASP.NET_SessionId Cookie mà mô-đun phụ phía máy chủ sử dụng để truy cập vào giá trị phiên (như thông tin người dùng).

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

enter image description here

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

Câu hỏi - 2 - Có Ajax yêu cầu nguyên nhân đặt thời gian chờ phiên? như Bảng điều khiển cập nhật , jQuery ajax, ...

Câu hỏi - 3 - Hiện HTTP Có nguyên nhân Đặt lại thời gian chờ của phiên không ??

Session sẽ hết hạn trong trường hợp người dùng chờ quá lâu giữa các yêu cầu. Session sẽ không hết hạn nếu bạn tiếp tục gọi số server side. Thời gian session ra sẽ được đặt trên mỗi yêu cầu đến máy chủ

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

Tôi nghĩ 'phiên sẽ không hết hạn nếu bạn tiếp tục kêu gọi tuyên bố code' phía máy chủ không true.I có một trang đơn giản với một' Cập nhật Panel' và một nút, tôi bấm vào nút mỗi phút 2 và phiên hết hạn sau 20 phút – Arian

+0

@Kerezo - Tôi có phiên 'Timeout = 1' trong' Web.config' của tôi. Tôi có cùng số lượng điều khiển trong biểu mẫu của tôi. Tôi nhấn nút sau mỗi 15 giây và xử lý tiếp tục cho đến 3 phút. – Pankaj

+0

Bạn có phiên là 'CookieLess' không? – Arian

1

này sẽ phụ thuộc vào rất nhiều yếu tố vì vậy tôi đề nghị bạn chạy một thử nghiệm như dưới đây. Nó thực sự mất ít hơn 5 phút để tìm hiểu xem tình hình chính xác của bạn có hoạt động trong môi trường của bạn hay không. Đây là mã của tôi mà tôi đã sử dụng để kiểm tra điều này, tôi sử dụng các điều khiển Telerik để kiểm tra ý tưởng nhưng tôi đã thêm một .get để có được câu trả lời chính xác mà bạn muốn. trang aspx có

<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> 

.trang cs có

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."; 
     } 

--- bạn có thể sắp xếp ở trên để phù hợp với tình huống của mình. Nhưng ý tưởng thì đơn giản. Bạn tải trang. Nhấp vào nút "Gia hạn" và điều này sẽ đặt phiên của bạn. Đợi 61 giây và trang sẽ làm mới và biến phiên đã biến mất. Thử lại lần nữa nhưng lần này click vào một trong hai nút khác sau vài giây và khi trang làm mới, bạn sẽ thấy rằng các biến session đã ở lại nguyên vẹn từ các cuộc gọi ajax. Cuộc gọi ajax trong tình huống này làm mới biến phiên.

4

Liệu phiên reset thời gian chờ trên mọi yêu cầu bất kể chúng ta kiểm tra phiên biến? Hoặc chúng ta nên sử dụng ít nhất một biến phiên?

Cho đến một biến phiên được thiết lập, một phiên id mới được tạo ra cho mỗi bài lại.

Liệu Ajax yêu cầu nguyên nhân đặt thời gian chờ phiên? như Update Panel, jQuery ajax, ...

ID phiên được lưu trong cookie theo mặc định, được gửi cho mọi yêu cầu AJAX cũng như không AJAX. Do đó máy chủ nhận thức được rằng người dùng phiên đang hoạt động. Đừng dùng từ ngữ của tôi cho nó. Sử dụng công cụ Fiddler hoặc F12 trong ví dụ. Bạn có thể thấy các cookie được gửi đi với mọi yêu cầu AJAX GET/POST.

+0

kịch bản của bạn đúng nếu 'Cookiless' được đặt thành false – Arian

Các vấn đề liên quan