我试图构建一个应用程序,但是会话数据遇到了问题。因此,我下载了一个新的CodeIgniter新项目,并尝试使用该会话,但仍然失败。这是我所做的:
application / config / autoload.php:
$autoload['libraries'] = array('session');
$autoload['helper'] = array('url');
application / config / config.php:
$config['sess_save_path'] = 'D:\Projects\CodeIgnter-fresh\application\cache\session';
此后,我创建了一个名为 User.php
的控制器User.php
<?php
class User extends CI_Controller {
public function index() {
$this->session->set_userdata('somedata', 'somevalue');
redirect('user/dashboard', 'refresh');
}
public function dashboard() {
var_dump($this->session->userdata);
}
}
控制器包含两种简单的方法。 index 方法设置一些用户数据,然后重定向到另一个方法,该方法转储用户数据。不幸的是,这是我所看到的:
看来我唯一能看到的数据是一些CodeIgniter数据,但是可以肯定地说,我尝试设置的数据已经消失了。 我注意到的有趣的事情是,在 application / cache / session 文件夹中,我可以看到一些包含数据的文件。因此,我想这一定是一些权限问题,但我无法弄清楚。有什么建议么?
我正在使用:
操作系统:Windows 10 Education
PHP版本:7.2.11
CodeIgniter版本:3.1.10
答案 0 :(得分:0)
答案 1 :(得分:0)
我在这个问题中看到2个问题:
1。将会话信息写入磁盘
第344行的config.php表示
'sess_save_path'
将会话保存到的位置,取决于驱动程序。
对于“文件”驱动程序,它是可写目录的路径。 警告:仅支持绝对路径!
重要提示:您需要设置有效的保存路径!
因此,您需要将其设置为false(不保存任何内容)或使用绝对路径。为了使这项工作可用于开发和生产,您可以使用PHP $_SERVER
数组,并在config.php中使用它,例如:
$config['sess_save_path'] = $_SERVER['DOCUMENT_ROOT'].'/application/cache/session/';
最后,您需要确保上述目录可写,但是只有您可以访问该目录(在生产服务器上)。
P.S .:您可以使用此行查看$ _SERVER中的内容:
<?php echo'<pre>';print_r($_SERVER); ?>
2。检索会话信息
此设置适用于我的设置:
$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = $_SERVER['DOCUMENT_ROOT'].'/application/cache/session/';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
$config['cookie_prefix'] = '';
$config['cookie_domain'] = '';
$config['cookie_path'] = '/';
$config['cookie_secure'] = FALSE;
$config['cookie_httponly'] = FALSE;
如果这些都不起作用,您仍然可以尝试覆盖自动加载,将此构造函数放入您的User
控制器中:
public function __construct(){
parent::__construct();
$this->load->library('session');
}