为什么呼叫会话不起作用?(代码点火器 3)

mos*_*toh 3 php mysql session codeigniter codeigniter-3

我的配置是这样的:

$config['sess_driver'] = 'database';  // select database driver
$config['sess_save_path'] = 'ci_sessions';  // name of the mysql table
$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = FALSE;
$config['sess_use_database']    = TRUE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = FALSE;
$config['sess_time_to_update']  = 300;
Run Code Online (Sandbox Code Playgroud)

我的自动加载是这样的:

$autoload['libraries'] = array('database', 'session', 'form_validation', 'functions');
Run Code Online (Sandbox Code Playgroud)

在控制器login.php 中:

$this->session->set_userdata('club', 'chelsea');
Run Code Online (Sandbox Code Playgroud)

在控制器dashboard.php 中:

echo $this->session->userdata('club');
Run Code Online (Sandbox Code Playgroud)

如果不同的控制器,它没有成功调用会话俱乐部

但是,当我在同一个控制器(控制器login.php)中调用 session club 时,它正在工作

我尝试$this->library->load('session');在Dashboard.php. 但这不是成功

有什么解决方案可以解决我的问题?

谢谢

小智 20

在 CodeIgniter 3.x 中,如果您刚刚升级到 PHP 7.x 版,请转到system/libraries/Session/session.php第 281 行并替换:

ini_set('session.name', $params['cookie_name']); 
Run Code Online (Sandbox Code Playgroud)

经过 :

ini_set('session.id', $params['cookie_name']);
Run Code Online (Sandbox Code Playgroud)


DFr*_*end 4

@Ali 的答案建议将工作或在构造函数中加载会话库,Dashboard.php就像这样......

class Dashboard extends CI_Controller
{
  public function __construct()
  {
    parent::__construct();
    $this->load->library('session');
  }

  //the rest of controller's code
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您只需要控制器内某一特定函数中的会话,则改为在该函数中加载库。

要点是,必须先将库加载到某个位置,然后才能调用其函数。

在控制器中选择自动加载或显式加载会话可能取决于您的站点需要使用会话的频率。如果每个控制器都使用它们,则选择自动加载。如果仅在少数地方需要会话,那么在不使用会话的地方加载会话就会浪费资源。