2011-11-10 91 views
3

「的問題:」
我用AJAX調用一個handler.php文件多次。會話更新調用

在handler.php我:

session_start(); 
$_SESSION['foo'] .= 'abc'; 

echo 'Session var: '.$_SESSION['foo'].'<br>'; 

現在,我看到的是:

Session var: abc 
Session var: abc 
Session var: abc 
... etc 

相反的:

Session var: abc 
Session var: abcabc 
Session var: abcabcabc 

請告訴我這個問題?
我希望你明白了吧:)

編輯:我忘了提,有時我得到的第二個(通常是什麼期待),但大部分時間我得到的第一個版本。

+0

想這應該做你expect.what是輸出,如果你呼應會話添加農行之前? – Flo

+0

@Flo沒有,它不存在 – Filkor

+0

你使用jQuery來做你的AJAX調用嗎?我問,因爲我有一個問題,我的會話不會在我的ajax調用的服務器端識別,除非我把完整的路徑(包括域)。 – Gazillion

回答

0

我找到了解決辦法...所以4個月後,我可以回答這個問題:)

的解決辦法似乎很容易,但我並沒有事先考慮一下。我認爲這是一個「更深」的問題,因爲我的代碼很長。所以解決方案是包含session_start();在「index.php」文件中(您可以調用ajax本身或包含.js文件的位置)。 我希望它能幫助,如果有人在將來碰上這些傻「simptoms」。* 所以,即使你沒有在「的index.php」文件中使用的會議,你有,如果你想包括在session_start()有在ajax「handler」php文件中使用會話。

(你必須包括在session_start();到hander.php過,當然)

2

附加的東西之前,也許定義$_SESSION['foo']爲空字符串:

session_start(); 

// prevent caching 
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
header("Cache-Control: no-cache"); 
header("Pragma: no-cache"); 

if (!isset($_SESSION['foo'])) 
    $_SESSION['foo'] = ''; 

$_SESSION['foo'] .= 'abc'; 

echo 'Session var: '.$_SESSION['foo'].'<br>'; 

檢查以及了Cookie您的瀏覽器啓用。

+0

我已經嘗試過這種方式,串接不起作用 – Filkor

+0

是否啓用Cookies?你在幾個瀏覽器上測試過嗎?你可以添加PHP調用header(),防止瀏覽器緩存Ajax響應(=>答案更新)? –

0

我知道這是一個超級大的問題,但我偶然發現它,而希望確認我讀到今天早些時候,在遇到同樣的行爲後。

我的應用程序,我們已經使用在session_start()和正在處理自定義數據庫處理程序會話。但是,在各種AJAX請求中將數據記錄到會話時,我們仍然遇到錯誤。

運行處理會話數據的併發AJAX請求的問題在於,PHP默認情況下一次只允許一個腳本訪問會話:從session_start()調用它到它退出或以其他方式調用的時間session_write_close()。當有多個AJAX請求同時發生並需要寫入會話時,它們可以相互踩到一起,最終得到不完整的數據。

這更好的解釋它比我:http://konrness.com/php5/how-to-prevent-blocking-php-requests]。

我特別的解決辦法是將數據存儲會話之外(在數據庫中的其他地方),以便其他AJAX請求不會對我的改變步驟。