Codeigniter 会话未保存在生产服务器上
Posted
技术标签:
【中文标题】Codeigniter 会话未保存在生产服务器上【英文标题】:Codeigniter session not saved on production server 【发布时间】:2019-01-18 23:32:07 【问题描述】:我已经寻找了几个小时来寻找解决方案。我有一个使用会话库的 CodeIgniter 项目。在我的本地 ubuntu 开发服务器上它工作正常,但在我的生产服务器上,CodeIgniter 会话似乎不起作用。所以我开始挖掘并尝试寻找解决方案。
我的codeigniter 3.1.9和php7.2版本
到目前为止,我确实尝试过但没有成功:
查看我的生产服务器上的会话是否在没有 CodeIgniter 的情况下工作。这似乎有效,所以问题一定与我的 CodeIgniter 项目有关。
在 CodeIgniter 配置文件中,我尝试了数据库会话和文件存储。
我检查了会话目录是否可写,确实如此。我什至可以看到其中存储的会话文件。
我将 CodeIgniter 升级到了最新版本。但没有帮助。
我尝试自动加载会话以及将它们加载到控制器中。但没有区别。
我的配置文件没什么特别的,出于测试目的,我编辑了 sess_save_path。但是在我在开发服务器上的默认配置文件中,它根本没有设置并且可以正常工作,但在生产服务器上却没有。设置路径没有任何改变。
$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = FCPATH . 'application/sessions/';
$config['sess_match_ip'] = false;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
我只是按照我应该使用的标准 CodeIgniter 会话功能。
我从会话变量中得到的唯一输出是:
__ci_last_regenerate 1534007152
我希望有人读到这篇文章并可以为我指出其他方向,以便我可以解决我的问题。
【问题讨论】:
尝试设置$config['sess_save_path'] = NULL;
我确实尝试过,并在我的开发服务器上使用它。但没有成功。
如何检查会话文件目录位置是否可写?它必须可由执行 Apache 的 precisses(通常是 www-data)的服务器用户写入。
^编辑进程。
了解您的 PHP 和 CI 版本将是一个优势 ...
【参考方案1】:
试试
$config['sess_save_path'] = "". FCPATH ."application/sessions/";
或
$config['sess_save_path'] = NULL;
两者都可以
【讨论】:
From the config file,在此设置上方几行:WARNING: Only absolute paths are supported!
和 IMPORTANT: You are REQUIRED to set a valid save path!
。为什么建议使用 NULL?【参考方案2】:
今天我又遇到了同样的问题,上传后,我的会话停止工作。
再次查看为什么我的会话不起作用后,我注意到我忘记将$config['cookie_domain']
设置为我的在线版本。所以把url改成服务器版本后,我的问题就解决了。
【讨论】:
以上是关于Codeigniter 会话未保存在生产服务器上的主要内容,如果未能解决你的问题,请参考以下文章
即使未加载 codeigniter 会话库,也会在数据库中创建新的会话条目。为啥?
Codeigniter - 注销链接不起作用 - 会话和 cookie 未销毁