Сессия CodeIgniter пуста - PullRequest
       2

Сессия CodeIgniter пуста

0 голосов
/ 08 апреля 2019

Я установил сеанс в классе из библиотек. Затем я попытался получить значение этого сеанса в другом классе из библиотек. Значение пусто.

Я заглянул в библиотеку CodeIgniter, чтобы выяснить, в чем может быть проблема, и на некоторые похожие темы из StackOverflow, но я не вижу ничего плохого с моей стороны. может быть, я что-то упустил. Пожалуйста помоги.

// IN THIS CLASS I SET THE SESSION 'fr_phone'

class Form_submit_fr {
    var $CI;
    protected $fr_id;
    protected $fr_data = array();
    public function __construct() {
      $this->CI =& get_instance();

      if (strpos($this->CI->uri->segment(1),'frid') !== false){ 
        $this->fr_id = (int)str_replace('frid','',$this->CI->uri->segment(1));

        $this->fr_data = $this->get_fr_data();

        // add the phone to session
        if (isset($this->fr_data->city_toll) && $this->fr_data->city_toll != '') {
            $fr_phone = $this->fr_data->city_toll;
          } else {
            $fr_phone = $this->fr_data->city_phone;
          }

          // here the session is set
          $this->CI->session->set_userdata('fr_phone', $fr_phone);

          //the result is correct
           echo $this->CI->session->userdata('fr_phone') . ' - fr_phone<br>';

      }
    }
 ....

}


// IN THIS CLASS I NEED TO GET THIS SESSION 'fr_phone'

class P_details {

    protected $page_link;
    protected $fr_data;

    var $CI;

    public function __construct(){
      $this->CI =& get_instance();
        if ($this->CI->uri->segment(2) == false && $this->CI->uri->segment(3) == false) {
          $this->page_link = $this->uri->segment(1)."/";
        } else if ($this->CI->uri->segment(1) != false && $this->CI->uri->segment(2) != false && $this->CI->uri->segment(3) == false) {

                     $this->page_link =  $this->CI->uri->segment(1)."/".$this->CI->uri->segment(2)."/";
        } else if ($this->CI->uri->segment(1) != false && $this->CI->uri->segment(2) != false && $this->CI->uri->segment(3) != false) {

          $this->page_link =  $this->CI->uri->segment(1)."/".$this->CI->uri->segment(2)."/";
          $this->fr_data = $this->get_fr_data($this->CI->uri->segment(3));

        }
      $this->CI->load->model('getDetails_model');


    }

    public function get_p_id($type = '') {


           $details_array = $this->CI->getDetails_model->all_details($this->page_link);

               if (empty($details_array)) {
                  return FALSE;
               }
               else {
                $data['fr_phone'] = '';

                $data['detail'] = $details_array;


                  // get phone from session 
                  // here the session is empty
                  echo $this->CI->session->userdata('fr_phone') . ' - fr_phone<br>';

                  if ($this->CI->session->userdata('fr_phone')) {
                    $data['fr_phone'] = $this->CI->session->userdata('fr_phone');
                  } 
                  if ($this->fr_data != '') {
                    $data['fr_detail'] = $this->fr_data;
                  }
                  return $data;
               }
    }

...

}

это мой конфигурационный файл:

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = NULL;
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;


$config['cookie_prefix']    = '';
$config['cookie_domain']    = '';
$config['cookie_path']      = '/';
$config['cookie_secure']    = FALSE;
$config['cookie_httponly']  = FALSE;

это мой файл автозагрузки:

$autoload['libraries'] = array('database','session');

Я внес предложенные изменения в конфигурационный файл для $ config ['sess_save_path']. большое спасибо. Я также мог видеть файлы в доступной для записи папке и записи в базе данных, когда проверял этот способ:

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 43200;
$config['sess_save_path'] = APPPATH.'writable';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

Также я использовал базу данных для сессии:

$config['sess_driver'] = 'database';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 43200;
$config['sess_save_path'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

В обоих случаях сессия работает, если я определяю сессию в Controller в конструкторе или индексной функции. Я могу получить сеанс в файлах просмотра и в других классах, но если я устанавливаю сеанс с условием для конкретной ссылки, тогда этот сеанс всегда пуст, когда я хочу получить его в классе из папки библиотек или в файлах просмотра:

//in controller
if (strpos($this->uri->segment(1),'frid') !== false){ 
   ...
$fr_phone = '111-222-3333';
  $this->session->set_userdata('fr_phone', $fr_phone);
   echo $this->session->userdata('fr_phone') // works 
}

Когда я вызываю этот сеанс в папке Class from library, сеанс пуст: пример выше для класса P_details. И нет никакого способа получить сеанс, который установлен в классе из папки библиотек, и получить его в другом классе из папки библиотек. Это очень странно, и я не могу этого понять. Также я попытался получить сессию на другом контроллере, но безуспешно.

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Это очень странно, но я удалил сессию из автозагрузки: $ autoload ['library'] = array ('database'); Я добавил session_start (); в контроллерах и я устанавливаю сессию обычным образом:

$ _ SESSION ['fr_phone'] = $ fr_phone;

Тогда я смог получить это значение в любых файлах. Это ошибка? Я попытался без session_start (), добавив $ this-> load-> library ('session'); и это не сработало. Кто-нибудь может найти ответ на этот вопрос?

Я использую CodeIgniter 3.0.2

0 голосов
/ 08 апреля 2019

У меня была похожая проблема с одним проектом.После долгой попытки я исправил проблему следующим образом

1) в config.php

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = 'writable absolute path';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

и создал папку с именем «абсолютный путь записи» в корне enter image description here

Надеется, что это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...