本地两个PHP(Codeigniter)应用账号同步登录登出问题如何解决?
问题解答
是否属于正常现象
该情况不属于正常现象,属于两个CodeIgniter应用的会话配置冲突导致的异常问题。
产生原因
CodeIgniter的会话默认配置对同域下部署的多个应用不做区分,本地部署时通常两个应用都使用localhost域名访问,触发了以下配置冲突:
- 默认的会话Cookie名称完全相同,浏览器会将两个应用返回的会话Cookie识别为同一个,两个应用共享同一个会话ID
- 如果使用文件存储会话,默认的会话文件存储路径为系统公共临时目录,相同会话ID会指向同一个会话存储文件
- 两个应用只要对会话中存储的用户ID校验逻辑兼容,就会出现同一账号同时登录的情况;任意应用执行登出操作时,都会销毁共享的会话数据/清空共享的会话Cookie,直接导致另一个应用同步登出
修复方案
分别修改两个应用application/config/config.php文件中的会话相关配置,保证两个应用的会话配置完全独立:
- 修改会话Cookie名称,两个应用设置不同的唯一值:
// 应用1配置 $config['sess_cookie_name'] = 'ci_session_app1'; // 应用2配置 $config['sess_cookie_name'] = 'ci_session_app2';
- 若两个应用部署在同域名的不同子目录下,单独配置Cookie路径:
// 应用1部署在 /app1/ 目录时配置 $config['cookie_path'] = '/app1/'; // 应用2部署在 /app2/ 目录时配置 $config['cookie_path'] = '/app2/';
- (可选)使用文件存储会话时,给每个应用配置独立的会话存储目录,提前创建对应目录并授予读写权限:
// 应用1配置 $config['sess_save_path'] = APPPATH . 'cache/session_app1/'; // 应用2配置 $config['sess_save_path'] = APPPATH . 'cache/session_app2/';
修改配置后清空两个应用的缓存和浏览器Cookie,重新测试即可恢复正常。
内容的提问来源于stack exchange,提问作者Mike Setyawan Mulyono
相关产品推荐
相关产品推荐

