Данные сеанса пропали после перенаправления в CI - PullRequest
3 голосов
/ 06 декабря 2011

Мне нужна твоя помощь.Я использовал сеанс для записи выбранного пользователем типа бизнеса в CI.Например, $ this-> ci-> session-> set_userdata ('biztype', 'food').Когда пользователь входит в систему, он работает нормально.Однако, как только пользователь выйдет, сеанс будет уничтожен в функции logout (). Поэтому я снова установил userdata в функции logout (). Вы можете просмотреть код ниже:

function logout()
{
  $biztype = $this->ci->session->userdata('biztype');
  $this->delete_autologin();

  $this->ci->session->set_userdata(array('user_id' => '', 'username' => '', 'status' =>  ''));

  $this->ci->session->sess_destroy();
  $this->ci->session->set_userdata('biztype',$biztype);
  //echo $this->ci->session->userdata('biztype');   //here, i can get biztype that i want
}

Однако, когдая выхожу и перенаправляю на домашнюю страницу, я не могу получить userdata ('biztype') и мой session_id изменились.Спасибо за помощь.

Ответы [ 3 ]

1 голос
/ 06 декабря 2011

Это прямо из Руководства пользователя CodeIgniter:

Уничтожение сеанса

Чтобы очистить текущий сеанс:

$this->session->sess_destroy();

Примечание: эта функция должна вызываться последней и даже мигать переменные больше не будут доступны. Если вы хотите только некоторые предметы уничтожено и не все, используйте unset_userdata ().

Так что нет, вы не можете уничтожить сеанс, а затем добавить к нему user_data, вам нужно перезагрузить / перенаправить его, как только будет установлен новый сеанс, добавить данные.

Попробуйте использовать куки для разрешения или используйте упомянутый unset_userdata() фн.

0 голосов
/ 16 июля 2015
   $email  = "abc@gmail.com";

   ///set the session 
   use the set_userdata function and include the session library

   $this->load->library('session');

   $this->session->set_userdata('session name',Value);
   i.e.
   $this->session->set_userdata('email', $email);

   //unset the session 
   $this->session->unset_userdata('session name');
   i.e.
   $this->session->unset_userdata('email');
0 голосов
/ 06 декабря 2011

$this->session->sess_destroy() ;

Эта функция должна вызываться только в конце выполнения. Для сброса данных (как вы пытаетесь это сделать) лучше использовать метод unset_userdata. Посмотрите, как вы должны это реализовать:

$unset_items = array('user_id' => '', 'username' => '', 'status' =>  '') ;

$this->ci->session->unset_userdata( $unset_items ) ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...