只有控制器的某些功能无法访问代码点火器中的会话数据


only some functions of controller cannot access session data in codeigniter

我是codeigniter的新手。 我正在一个控制器中设置会话。 我可以从另一个控制器的某些功能访问该会话数据。 但只有某些函数无法访问会话数据。 请帮助我为什么会发生这种情况。

我设置会话由

$admin_details=array(
    'admin_id'=>$admin_id,
    'admin_name'=>$admin_name,
    'email'=>$email,
    'is_admin_logged_in'=>true,
    'user_type'=>'admin'
    );
$this->session->set_userdata($admin_details);

我通过以下方式访问了它

function manage_profile()
{
    if(!$this->session->userdata('is_admin_logged_in'))
    {
        $this->load->view('admin/test');
    }
}

但它正在加载视图"测试"。 我已经加载了会话库并设置了加密密钥。 它适用于同一控制器中的其他一些功能。

这是因为

当您键入$this->session->userdata('is_admin_logged_in')时,您正在访问会话的"容器"。

$admin_details=array( 'admin_id'=>$admin_id, 'admin_name'=>$admin_name, 'email'=>$email, 'is_admin_logged_in'=>true, 'user_type'=>'admin' ); $this->session->set_userdata($admin_details);

您实际上需要这样做: $this->session->set_userdata('name_your_session_something',$admin_details);

然后要访问它:

$session = $this->session->userdata('name_your_session_something'); $admin_logged = $session['is_admin_logged_in'];

if(!$admin_logged){ //if admin is not logged in do this }

这是一个简单的阵列情况。

所以这应该是代码:

设置会话:

$admin_details=array( 
        'admin_id'=>$admin_id, 
        'admin_name'=>$admin_name, 
        'email'=>$email, 
        'is_admin_logged_in'=>true, 
        'user_type'=>'admin' 
);
$this->session->set_userdata('name_your_session_something',$admin_details);

获取会话:

$session = $this->session->userdata('name_your_session_something'); 
$admin_logged = $session['is_admin_logged_in'];

不知道它是否有帮助,但一件重要的事情是,

如果您使用的是 iframe 并使用 ajax 调用获取内容,则可能会发生这种情况。这是因为 codeIgniter 中的会话类每 $config[‘sess_time_to_update’] 分钟更新一次会话信息。

这是一个非常有用的安全功能,可以阻止会话劫持。如果您通过 AJAX 获取详细信息,则会更新会话并生成新的会话 ID,但浏览器中的 cookie 不会 updated.so 下次浏览器请求新页面时,它会发送具有错误会话 ID 的 cookie,并且会话变得无效,从而导致会话数据丢失。

此线程可能会帮助您克服这种情况。

归功于真正找到解决方案的人。谢谢。

第 1 步:在常量中.php(application/config/)必须添加以下行来定义 AJAX 请求。

// Define Ajax Request
 define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
//  

第 2 步:在(应用程序/库)下创建一个名为 MY_Session.php 的新文件

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Session extends CI_Session 
{
/**
* Update an existing session
*
* @access    public
* @return    void
*/
    function sess_update()
    {
       // skip the session update if this is an AJAX call!
       if ( !IS_AJAX )
       {
           parent::sess_update();
       }
    } 
}
/* End of file MY_Session.php */
/* Location: ./application/libraries/MY_Session.php */