[英]Website stopped working after whole site restoration, PHP Warning: session_start(): Failed to read session data
[英]Memcached PHP Session error: session_start(): Failed to read session data
我的 Web 應用程序使用CodeIgniter 3.1.10作為框架和php 7.1 ,我想嘗試使用memcached ,因為我計划使用負載均衡器和多個 Web 服務器。
我在config.php 中設置會話配置如下:
$config['sess_driver'] = 'memcached';
$config['sess_save_path'] = 'localhost:11211?timeout=10&read_timeout=10&persistent=1';
到目前為止,我已經設法設置了 memcached 服務器並能夠存儲會話,但是memcached 不是很一致。 有時它會返回這樣的錯誤:
session_start(): Failed to read session data: user (path: localhost:11211)
尤其是在同時調用多個 ajax 的頁面上。 經常有一兩個 ajax 返回如上所述的錯誤。 但是當我設置使用文件 session 時,ajax 工作正常(從不返回任何會話錯誤)。
下面是在 php.ini 上設置的 memcached 配置
memcached.compression_factor 1.3 1.3
memcached.compression_threshold 2000 2000
memcached.compression_type fastlz fastlz
memcached.default_binary_protocol 0 0
memcached.default_connect_timeout 0 0
memcached.default_consistent_hash 0 0
memcached.serializer php php
memcached.sess_binary_protocol 1 1
memcached.sess_connect_timeout 0 0
memcached.sess_consistent_hash 1 1
memcached.sess_lock_expire 0 0
memcached.sess_lock_max_wait not set not set
memcached.sess_lock_retries 5 5
memcached.sess_lock_wait not set not set
memcached.sess_lock_wait_max 2000 2000
memcached.sess_lock_wait_min 1000 1000
memcached.sess_locking 1 1
memcached.sess_number_of_replicas 0 0
memcached.sess_persistent 0 0
memcached.sess_prefix memc.sess. memc.sess.
memcached.sess_randomize_replica_read 0 0
memcached.sess_remove_failed_servers 0 0
memcached.sess_sasl_password no value no value
memcached.sess_sasl_username no value no value
memcached.sess_server_failure_limit 0 0
memcached.store_retry_count 2 2
有沒有人有類似經歷或知道出路? 提前致謝
我在Debian 9的memcached 3.1.13和libmemcached 1.0.18上遇到了PHP 7.3的相同問題。
如上所述,使用文件會話處理程序時,錯誤不再發生。 文件會話處理程序不是我們項目中的選項,我們必須堅持使用memcached。
禁用memcached會話鎖定也可以解決以下問題:
memcached.sess_locking = Off
這不是一個好選擇,因為它可能導致並發訪問問題。
有沒有人有類似的經驗或知道出路? 提前致謝
問題在於這些值:
memcached.sess_lock_wait_max 2000 2000
memcached.sess_lock_wait_min 1000 1000
memcached.sess_locking 1 1
了解每個 ajax 調用將獨立運行,這意味着它們將根據需要請求 session_lock。 當鎖定嘗試失敗時,它將使等待時間加倍並重試,直到達到 wait_max 為止。 換句話說,您的配置說如果您嘗試鎖定並且失敗,請不要打擾。
解決方案是降低您的wait_min 並增加您的wait_max。 這應該可以解決您的問題。 還有另一個變量可以自動釋放鎖定,這應該有助於解決您遇到的賽車問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.