2014-01-10 107 views
2

我有一個標準的HTML頁面,有幾個img標籤,每個這些都指向我們的服務器上的PHP文件。當php文件被加載時,它會在生成圖像之前將一些數據保存到會話中。PHP會話鎖定和使用Memcache存儲會話

這個來自每個腳本的會話中的數據然後在我們的應用程序的其他腳本中使用。

生成圖像的php文件以session_start開始,並且在使用本機PHP會話處理程序時似乎都很好。每個執行都正確完成,可以檢索完整的會話數據。

如果我啓用memcache來保存會話,則會出現問題。看起來,每個PHP腳本都是同時執行的,因此當保存到會話中時,只有最後執行的纔會真正存儲任何數據。

經過進一步調查,Memcache中我發現,最新的穩定版本不支持會話鎖定,只有在3.0.4?他們介紹的這款 - http://pecl.php.net/package/memcache/3.0.4

是可以安全使用3.0.4當它是唯一在測試?

2.2.7有什麼替代方法或解決此問題的方法嗎?

如果您想查看代碼的示例,請讓我知道。

謝謝。

回答

0

php的-memcached的擴展支持會話鎖定

http://us3.php.net/memcached

http://us1.php.net/manual/en/memcached.sessions.php

的內存緩存和memcached的擴展語法上看起來相似,所以可能不會太多頭疼的給它一試。 (memcached有一個穩定版本2.1.0 2012-08-07發佈)。


如果您在使用設置的memcache 2.2.7你將極有可能通過一些設置來實現自己鎖在會話「session_is_locked」變量,然後鬆開/它解封當腳本完成寫入會議。然後,在繼續寫入會話的任何腳本之前,您總是需要檢查該變量是否已設置。

+0

php.ini memcached設置(包括sess.locking)在這裏 - > http://www.php.net/manual/en/memcached.configuration.php。我沒有說明測試版本是否「安全」,因爲我沒有足夠的經驗使用memcache擴展來爲您提供適當的答案。儘管id假設檢查pecl頁面上的包錯誤可能有助於您的決定。 – KorreyD

+0

Memcached似乎已經做到了這一點,似乎現在正在按預期工作,並沒有太多的麻煩來改變。謝謝! –