【问题标题】:ini_set(): A session is active. You cannot change the session module's ini settings at this time in codiegniterini_set():会话处于活动状态。此时您无法在 codiegniter 中更改会话模块的 ini 设置
【发布时间】:2018-09-10 07:00:42
【问题描述】:

我已检查结果,但无法解决我的错误。
我只是使用了 session_start 并给出了这个警告信息。

ini_set():会话处于活动状态。您不能更改会话模块的 此时的ini设置

下面是我的代码-

$sess_array = array(
                      'id' => $row->empid,
                      'username' => $row->emp_name,
                      'loggedIn' => '1',
                      'usertype' => $usertype
                  );  
$this->session->set_userdata('logged_in', $sess_array); // store session    

Dashboard.php 页面-

session_start();   

error_reporting(E_ALL & ~E_NOTICE);    

//error_reporting(0);   

if (!defined('BASEPATH'))    

 exit('No direct script access allowed');    




class Dashboard extends CI_Controller
{

public function __construct()
{
    parent::__construct();

}

public function index()
{

    if ($this->session->userdata('logged_in'))
    {
        $EmpName = $this->session->userdata['logged_in']['username'];
        $Emp_id = $this->session->userdata['logged_in']['id'];  
  }  
}  

虽然问了同样的问题,但我没有得到这个问题的正确解决方案。请任何人解决该问题。

【问题讨论】:

  • dashboard.php 中删除session_start();。当项目通过 URL 启动时,Codeignitor 本身启动了会话。 (通过配置文件)
  • 然后它通过会话正在检查的 if 条件并进入 else 部分
  • 该代码中没有else 部分
  • 对不起,我忘了提及其他部分。但这段代码中还有一个 else 部分。

标签: php codeigniter session


【解决方案1】:

这真的对我有用,基本上你先检查会话然后如果它没有初始化然后你调用 ini_set 和其他然后调用 session_start()

if (!isset($_SESSION)) {

// server should keep session data for AT LEAST 24 hour
ini_set('session.gc_maxlifetime', 60 * 60 * 24);

// each client should remember their session id for EXACTLY 24 hour
session_set_cookie_params(60 * 60 * 24);
session_start();
}

所以你确实在调用 ini_set 和 session_set_cookie_params 等之后开始你的会话

【讨论】:

    【解决方案2】:

    您应该在application/config/autoload.php 文件中加载codeigniter 为您提供的会话库,而不是使用session_start();,转到以下行:

    $autoload['libraries'] = array('session');
    

    或者,如果您只想从 Dashboard 控制器加载库,您可以通过 $this->load->library('session'); 加载它,您可以将它放在构造函数中以便能够在孔控制器内使用它,或者添加它以特定的方法。

    【讨论】:

    • 我已经这样做了,在自动加载中加载会话,当我从 dashboard.php 中删除 session_start 时,如果部分不工作,它会进入其他部分。不验证会话用户数据
    • $autoload['libraries'] = array('database', 'email', 'pagination', 'javascript','encrypt','session');
    • 你确定是在session中设置数据,直接设置后尝试dump$this->session->userdata('logged_in')
    • 是的,我已将其转储,所有值均已正确设置。我不知道是什么问题,这是我 2 年开发生涯中的第一次。
    • 尝试将它也转储到您的仪表板控制器中,并在您的 if 语句中尝试has_userdata
    【解决方案3】:

    我刚刚通过codeigniter 3.11.1更新了我的会话redis驱动文件:“system/libraries/Session/drivers/Session_redis_driver.php”: new driver file 这个错误已经消失了

    在 application/config/config.php 文件中请放下一个:

    $config['sess_driver'] = 'redis';
    $config['sess_save_path'] = 'your-redis-instance:port'
    $config['sess_match_ip'] = FALSE;
    $config['sess_regenerate_destroy'] = FALSE;
    

    到目前为止它有效。

    【讨论】:

      猜你喜欢
      • 2012-11-12
      • 2015-12-25
      • 2012-11-19
      • 2020-04-26
      • 1970-01-01
      • 2020-07-14
      • 2018-05-21
      • 2015-05-21
      • 2019-11-07
      相关资源
      最近更新 更多