2014-06-30 120 views
1

我也跟着建立一個安全的會話管理系統是wikiHow教程:http://www.wikihow.com/Create-a-Secure-Session-Managment-System-in-PHP-and-MySQLPHP會話類

,它工作正常。

現在,我有一個問題,即會話cookie _s變化(和日誌信息)時,連續2 AJAX調用是這樣的:

<input type="button" value="go" id="mybutton" /> 
<script> 
     $("#mybutton").click(function() { 
      $.get("ajax1.php"); 
      $.get("ajax2.php"); 
     }); 

</script> 

其中兩個ajax1.php和ajax2.php剛需會話類文件

<?php 
require('session.class.php'); 
$session = new session(); 
$session->start_session('_s', false); 
?> 

單擊該按鈕後,存儲在_s cookie中的會話標識會更改爲新的。我在這兩個ajax之間加了個警告

<input type="button" value="go" id="mybutton" /> 
<script> 
     $("#mybutton").click(function() { 
      $.get("ajax1.php"); 
      alert("anything"); 
      $.get("ajax2.php"); 
     }); 

</script> 

通過分離兩個ajax調用,會話id沒有變化。

編輯: 實際的代碼是不是這樣,,但是每個而是許多單獨的按鈕有它的AJAX ,,但它發生在用戶點擊按鈕響應之前連續。

<input type="button" value="go" id="mybutton" /> 
<script> 
     $("#mybutton").click(function() { 
      $.get("ajax1.php"); 
     }); 

</script> 
<input type="button" value="go" id="mybutton2" /> 
<script> 
     $("#mybutton2").click(function() { 
      $.get("ajax2.php"); 
     }); 

</script> 

有什麼想法?

回答

3

當您進行第一次AJAX調用時,服務器啓動一個會話並將會話ID發送回cookie中的瀏覽器。爲了讓第二個AJAX調用在同一個會話中,它必須將該cookie發送回服務器。

但是,在發送第二個呼叫之前,您並未等待第一個呼叫的響應。所以cookie沒有被收到,並且不能在第二次通話時發送。任何取決於AJAX調用結果的東西都必須在其回調函數中完成。所以,你應該做的:

$.get('ajax1.php', function() { 
    $.get('ajax2.php'); 
}); 
+0

感謝..但實際的代碼中有一個序列只有一個AJAX ,,但頁面上的按鈕和用戶等待響應之前,許多按鈕點擊..如何我克服了這個問題 –

+0

當他們點擊一個按鈕時顯示某種「加載...」的東西,並且不允許他們點擊其他任何東西,直到響應回來。 – Barmar

+0

我想過這樣做,但這會惹惱用戶,因爲他們必須做出很多選擇,每次需要大約1秒才能完成,我認爲可能有另一種解決方案 –