redirect()之后,CodeIgniter无法使用会话数据

时间:2019-05-29 14:02:55

标签: php codeigniter session

我试图构建一个应用程序,但是会话数据遇到了问题。因此,我下载了一个新的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 方法设置一些用户数据,然后重定向到另一个方法,该方法转储用户数据。不幸的是,这是我所看到的:
enter image description here
看来我唯一能看到的数据是一些CodeIgniter数据,但是可以肯定地说,我尝试设置的数据已经消失了。 我注意到的有趣的事情是,在 application / cache / session 文件夹中,我可以看到一些包含数据的文件。因此,我想这一定是一些权限问题,但我无法弄清楚。有什么建议么?

我正在使用:
操作系统:Windows 10 Education
PHP版本:7.2.11
CodeIgniter版本:3.1.10

2 个答案:

答案 0 :(得分:0)

在配置中将驱动程序设置为“文件”:

$config['sess_driver'] = 'files';

此处的更多信息Codeigniter Session User Manual

答案 1 :(得分:0)

我在这个问题中看到2个问题:

  1. 无法使用CI将会话信息写入磁盘 文件驱动器
  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 ['cookie_domain'],$ config ['cookie_path'], $ config ['cookie_secure']可能会影响会话:

此设置适用于我的设置:

$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');
}