簡體   English   中英

PHP並發會話和AJAX的麻煩

[英]PHP trouble with concurrent sessions and AJAX

我有一個會話處理程序類,在腳本的末尾調用session_write_close()。 這確保即使發出header()或exit(),也會保存會話數據。

public function __destruct()
{
    session_write_close();
}

但是,我注意到,對於我的一個AJAX頁面,數據庫層提交了兩個會話更新。

我的猜測是[1]頁加載並發送[2] AJAX請求。 那個[2] AJAX請求必須在[1]頁面有機會調用session_write_close()之前啟動會話。

在[2] AJAX頁面加載會話之后,[1]頁面最終保存會話,然后在[2] AJAX請求保存會話后不久 - 這會覆蓋第一個會話!

它可能看起來像這樣:

[1] page loads session
[1] page sends output
[2] ajax loads session
[1] page saves session
[2] ajax sends output
[2] ajax saves session

如何確保一個頁面在另一個頁面有機會保存會話之前沒有加載會話,我該怎么辦?

這個假設是錯誤的。

...會話數據被鎖定以防止並發寫入任何時候只有一個腳本可以在會話上運行http://us.php.net/session_write_close

換句話說,您可以同時為用戶運行100個AJAX請求,他們每個人都會等待輪到他們。

我的問題在選擇正確的會話表列時出錯,導致我的會話在每次加載時重新創建。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM