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 中的会话

PHP 会话数据未保存

Codeigniter - 注销链接不起作用 - 会话和 cookie 未销毁

Codeigniter 3.0 会话表名称为空字符串,因此出现错误

Codeigniter v3.0 Flashdata 会话在 PHP 7.4 和 XAMPP 8.0 中未过期