我正在使用Zend_Session_SaveHandler_DbTable在多個機器間共享會話數據。Zend_Session_SaveHandler_DbTable和併發請求
根據以下示例,我遇到了併發請求問題。請求A和B運行在同一時間對同一用戶
- 請求A - 在用戶的會話數據讀取
- 請求B - 通過添加可變表面處理 - 在用戶的會話數據
- 請求B讀取XYZ到會話並寫入會話數據到數據庫
- 請求A - 表面處理和寫入原來的會話值回數據庫
結果。我們失去了xyz變量。請注意,請求A回寫數據庫,即使它沒有更改會話變量。我認爲這是因爲它需要更新會話的修改時間。
問題是請求A不鎖定會話,它看起來像Zend_Session_SaveHandler_DbTable不支持會話鎖定。有沒有人有任何關於如何解決這個問題的例子?使用memcached或返回基於文件的會話不是一種選擇。
暫時我已經破解了Zend_Session_SaveHandler_DbTable寫入方法來比較在讀取和寫入時的修改日期,如果不同,請不要將會話寫回數據庫。