codeigniter set_userdata не сохраняет типы в данных сеанса

#session #codeigniter #user-data

#сеанс #codeigniter #пользовательские данные

Вопрос:

В CodeIgniter 1.7.3, когда вы используете set_userdata для добавления логических, целых и строковых значений, а затем немедленно считываете их обратно, типы сохраняются. Но если вы перенаправляете на другую страницу и считываете значения обратно, вы всегда получаете строковые значения. В CI 1.6.1 типы были бы сохранены. Есть идеи, почему это происходит? Это ошибка в 1.7.3? Есть обходные пути?

Пример: запустите test1, чтобы установить данные сеанса, прочитайте их обратно, перенаправьте на test2 и прочитайте их снова:

 <?php
class Test1 extends Controller
{
    function index()
    {
        $this->session->set_userdata(array('vbool'=>TRUE));
        $this->session->set_userdata(array('vint'=>23));
        $this->session->set_userdata(array('vstr'=>'abc'));

        $vbool = $this->session->userdata('vbool');
        $vint = $this->session->userdata('vint');
        $vstr = $this->session->userdata('vstr');

        log_message('error', "test1: vbool=$vbool " . gettype($vbool));
        log_message('error', "test1: vint=$vint " . gettype($vint));
        log_message('error', "test1: vstr=$vstr " . gettype($vstr));

        redirect('/backend/test2', 'location');
    }
}
?>


<?php
class Test2 extends Controller
{

    function index()
    {
        $vbool = $this->session->userdata('vbool');
        $vint = $this->session->userdata('vint');
        $vstr = $this->session->userdata('vstr');

        log_message('error', "test2: vbool=$vbool " . gettype($vbool));
        log_message('error', "test2: vint=$vint " . gettype($vint));
        log_message('error', "test2: vstr=$vstr " . gettype($vstr));
    }

}
?>
  

ВЫВОД в журнале CI

 ERROR - 2011-05-09 16:56:11 --> test1: vbool=1 boolean
ERROR - 2011-05-09 16:56:11 --> test1: vint=23 integer
ERROR - 2011-05-09 16:56:11 --> test1: vstr=abc string

ERROR - 2011-05-09 16:56:11 --> test2: vbool=1 string
ERROR - 2011-05-09 16:56:11 --> test2: vint=23 string
ERROR - 2011-05-09 16:56:11 --> test2: vstr=abc string
  

НАСТРОЙКИ КОНФИГУРАЦИИ

 ERROR - 2011-05-09 16:56:11 --> sess_encrypt_cookie=
ERROR - 2011-05-09 16:56:11 --> sess_use_database=
ERROR - 2011-05-09 16:56:11 --> sess_table_name=ci_sessions
ERROR - 2011-05-09 16:56:11 --> sess_expiration=7200
ERROR - 2011-05-09 16:56:11 --> sess_match_ip=
ERROR - 2011-05-09 16:56:11 --> sess_match_useragent=1
ERROR - 2011-05-09 16:56:11 --> sess_cookie_name=ci_session
ERROR - 2011-05-09 16:56:11 --> cookie_prefix=
ERROR - 2011-05-09 16:56:11 --> cookie_path=/
ERROR - 2011-05-09 16:56:11 --> sess_time_to_update=300
ERROR - 2011-05-09 16:56:11 --> encryption_key=
  

Комментарии:

1. Просто мысль, на самом деле это не решает проблему, но почему вы не пробовали обновляться до CI2?

2. Обновление до CI2.0.0 решило проблему. Спасибо!

Ответ №1:

Я попробовал тот же тест на CodeIgniter 2.0.0, и он отлично сработал — типы данных, сохраненные в сеансе с помощью set_userdata (), были сохранены при чтении данных сеанса с помощью userdata (). Похоже, это ошибка CI 1.7.3 при сохранении данных сеанса, затем выполнении перенаправления, затем чтении данных сеанса.