Сеанс CodeIgniter пустPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Сеанс CodeIgniter пуст

Сообщение Anonymous »

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

Я заглянул в библиотеку 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
';

}
}
....

}

Код: Выделить всё

// 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
';

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;
В обоих случаях сеанс работает, если я определяю сеанс в контроллере в конструкторе или функции индекса. Я могу получить сеанс в файлах просмотра и в других классах, но если я устанавливаю сеанс по условию для определенной ссылки, тогда этот сеанс всегда пуст, когда я хочу получить его в классе из папки библиотек или в файлах представления:

Код: Выделить всё

//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
}
Когда я вызываю этот сеанс в папке «Класс из библиотеки», сеанс пуст: пример выше для класса P_details. И нет способа получить сеанс, установленный в папке «Класс из библиотеки», и получить его в папке «Другой класс из библиотеки». Это очень странно, и я не могу этого понять. Также я пытался получить сеанс на другом контроллере, но безуспешно.

Подробнее здесь: https://stackoverflow.com/questions/555 ... n-is-empty
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»