我正在使用 CodeIgniter 3 框架开发一个长期运行的项目。几个月来,我们一直遇到会话随机丢失的问题。我已将框架文件更新到最新版本(3.1.13)。看起来这解决了开发服务器上的问题,但在生产中它仍然存在。但我注意到现在只有当响应发送新的会话 cookie 时才会发生这种情况,这会在重新生成会话 id 时发生。当我更改 $config['sess_time_to_update'] 时,它会正确反映所需的时间。
开发服务器和生产服务器之间的区别在于会话驱动程序 - 它是开发服务器上的文件,而在生产环境中我们使用 memcached。所以我做了一个实验,将驱动程序切换到文件,会话不再丢失。我还尝试使用 Redis 驱动程序进行设置,也没有引起问题。所以肯定是Memcached驱动的问题。但我不想换另一个。日志中没有错误。我还检查了 php.ini 文件和 memcached 变量都是默认值。
CodeIgniter v3.1.13、PHP 7.4.3、适用于 Memcached 的 Amazon ElastiCache
这是配置:
$config['sess_driver'] = 'memcached'; $config['sess_cookie_name'] = 'ci_session'; $config['sess_expiration'] = 14400; $config['sess_save_path'] = 'host.com:11211'; $config['sess_match_ip'] = FALSE; $config['sess_time_to_update'] = 300; $config['sess_regenerate_destroy'] = FALSE;
任何在哪里查看或检查什么内容的想法将不胜感激。
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号