我是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');
}
}
但它正在加载视图'test'。我已加载会话库并设置加密密钥。它适用于同一控制器中的其他一些功能。
答案 0 :(得分:0)
这是因为当您输入$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'];
答案 1 :(得分:0)
不知道它有帮助与否,但重要的是,
如果您正在使用iframe并使用ajax调用获取内容,则可能会发生这种情况。这是因为codeIgniter中的会话类会更新每$config[‘sess_time_to_update’]
分钟的会话信息。
这是阻止会话劫持的非常有用的安全功能。 如果您通过AJAX获取详细信息,会话将更新并生成新的会话ID,但浏览器中的cookie不会更新。因此,下次浏览器请求新页面时,它会发送一个包含错误会话ID的cookie会话变得无效,导致会话数据丢失。
This thread可能会帮助您克服这种情况。
对实际找到解决方案的人的信用。 感谢。
第1步: 在constants.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 */