为什么呼叫会话不起作用? (代码点火器 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;

我的自动加载是这样的:

 $autoload['libraries'] = array('database', 'session', 'form_validation', 'functions');

在控制器 login.php 中:

 $this->session->set_userdata('club', 'chelsea');

在控制器 dashboard.php 中:

 echo $this->session->userdata('club');

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

但是,当我在同一个控制器(controller login.php )中调用会话俱乐部时,它正在工作

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

有什么办法可以解决我的问题吗?

谢谢

原文由 moses toh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 582
2 个回答

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

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

  //the rest of controller's code
}

或者,如果您只需要在控制器内的一个特定功能中使用会话,则改为在该功能中加载库。

关键是必须先将库加载到某个地方,然后才能调用它的函数。

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

原文由 DFriend 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

 ini_set('session.name', $params['cookie_name']);

经过 :

 ini_set('session.id', $params['cookie_name']);

原文由 Fadian Adhitya Nugraha 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏