我是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 */