Пользовательские данные в сеансе codeigniter недоступны на нескольких страницах/представлениях

Я столкнулся с проблемами в классе сеанса codeigniter 2.x. Я хочу иметь идентификатор пользователя в сеансе для глобального доступа к моим страницам после входа пользователя в систему.

У меня есть 2 представления и 1 контроллер, одно представление, у меня была форма входа в систему, когда пользователь отправляет форму, я проверяю ее и создаю данные пользователя сеанса, вызывая метод в контроллере как

function create_session($data) {        
        $mydata = array(
                   'userid'  => $data,
                   'role'     => $role,
                   'logged_in' => TRUE
               );

        $this->session->set_userdata($mydata);

        return;
    }

тогда загружается мой второй вид, и у меня есть этот вид

print_r($this->session->userdata); 

и он распечатывает правильные результаты

но когда я нажимаю на 1-й вид в навигации, мне это нравится

[userdata] => 

его пустая конфигурация моего сеанса такая же, как

$config['encryption_key'] = 'askdfjowieuriomzx,mv';
$config['sess_cookie_name'] = 'wana_session';
$config['sess_expiration'] = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie'] = TRUE;
$config['sess_use_database'] = TRUE;
$config['sess_table_name'] = 'wana_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update'] = 300; 

Я искал форумы, но я не могу решить эту проблему, пожалуйста, решите эту проблему или предложите альтернативный метод.


person Bilal    schedule 20.12.2011    source источник
comment
Странно, вы что-нибудь делаете с сеансом после его создания? Работает ли это на самом минимальном примере без каких-либо других функций, кроме создания и чтения сеанса?   -  person Shomz    schedule 20.12.2011
comment
@Shomz Я не проверял. Я ничего не делаю с сеансом. Просто установка пользовательских данных   -  person Bilal    schedule 20.12.2011
comment
Хорошо, а это работает, если вместо базы данных использовать куки?   -  person Shomz    schedule 20.12.2011
comment
Мое первое предположение состоит в том, что контроллер, который обрабатывает создание страницы навигации, не имеет загруженной библиотеки сеансов. Сначала убедитесь в этом. Если это не так, вы можете загрузить его там или, как упомянул Шомз ниже, вы можете автоматически загрузить его в файле config › autoload.php. Я рекомендую сделать это, если вы используете пользовательские данные на всем своем сайте.   -  person Matt Moore    schedule 20.12.2011


Ответы (4)


Попробуйте изменить ссылку на "gmt" - в config.php

$config['time_reference'] = 'gmt'; вместо $config['time_reference'] = 'local';

person scibuff    schedule 08.10.2012

Помимо комментария, который я вам написал, убедитесь, что вы загружаете свою библиотеку сеансов на каждой странице, которая вам нужна, или вы используете автозагрузку.

person Shomz    schedule 20.12.2011

если вы установите пользовательские данные, вы можете получить к ним доступ с вашего основного контроллера, назначить его защищенному var (массиву), и все, что расширяет ваш основной контроллер, должно иметь к нему доступ.

class Main_Controller extends CI_Controller
{
protected $_session_data=array();

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

   if($this->session->userdata)
   {
      foreach($this->session->userdata as $k => $v)
      {
         $this->_session_data[$k] = $v;
      }
   }
}
}

некоторый класс, расширяющий ваш основной контроллер

class someclass extends Main_Controller
{

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

public function view1()
{
   $this->load->view('view1', array('session_data'=>$this->_session_data))
 }

 public function view2()
 {
    $this->load->view('view2', array('session_data'=>$this->_session_data))
 }
}

внутри каждого вида

var_dump($session_data['uid'])


foreach($session_data as $k){}
person Philip    schedule 20.12.2011

$config['sess_encrypt_cookie']  = FALSE;

Это моя конфигурация, просто предположение

person fengd    schedule 20.12.2011