Восстановите идентификатор_сессии в CodeIgniter - PullRequest
0 голосов
/ 11 июля 2011

Я хочу уничтожить, восстановить идентификатор сеанса и затем запустить сеанс, что делается в стандартном PHP, как показано ниже.Как я могу сделать это в CodeIgniter?

session_destroy();
session_id($old_session_id);
session_start();

Я думаю, что сессия запускается автоматически при автозагрузке библиотеки:

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

Это так?Как я могу использовать session_id($old_session_id); в CodeIgniter?Я пытаюсь с $this->session->set_userdata('session_id', $old_session_id);

Но, похоже, что-то не работает нормально, так как я не могу получить данные сеанса.Любая идея, если что-то не так с вышеуказанными строками или что-то еще?Спасибо.

Ответы [ 2 ]

1 голос
/ 11 июля 2011

Сеансы в CodeIgniter отличаются от нативных сессий PHP. На самом деле, они даже не являются сеансами вообще, так как на самом деле они являются зашифрованными cookie-файлами (вы также можете использовать базу данных для хранения значений сеанса, но все же они не совпадают с php-сессией).

Цитирование из руководства: Что такое данные сеанса?

A session, as far as CodeIgniter is concerned, is simply an array containing the following information:

    The user's unique Session ID (this is a statistically random string with very strong entropy, hashed with MD5 for portability, and regenerated (by default) every five minutes)
    The user's IP Address
    The user's User Agent data (the first 50 characters of the browser data string)
    The "last activity" time stamp.

The above data is stored in a cookie as a serialized array with this prototype: [array] (
     'session_id'    => random hash,
     'ip_address'    => 'string - user IP address',
     'user_agent'    => 'string - user agent data',
     'last_activity' => timestamp )

Всякий раз, когда вы загружаете страницу, CI проверяет куки, чтобы увидеть, есть ли там сессия. Если нет (либо потому, что вы не установили его, либо потому, что срок его действия истек), сеанс будет создан. Если он там, вместо этого будет автоматически генерироваться CI

Если вы хотите использовать нативные сеансы CI, то так и есть. В противном случае вы можете использовать нативные php (фреймворк очень гибкий), но вы не можете смешивать их, так как они действуют на разных уровнях (на сервере для php, на клиенте для сеанса CI)

1 голос
/ 11 июля 2011

Некоторые вещи для проверки:

  1. Убедитесь, что сеансы работают в PHP без CodeIgniter.Если сеансы не работают, значит, ваш сервер не сохраняет информацию о сеансе правильно

  2. Проверьте, сохраняете ли вы информацию сеанса в базе данных или нет (В application / config / config.php делает $ config['sess_use_database'] равно FALSE? Если TRUE, то убедитесь, что этот код импортирован в вашу БД

CREATE TABLE IF NOT EXISTS  `ci_sessions` (
    session_id varchar(40) DEFAULT '0' NOT NULL,
    ip_address varchar(16) DEFAULT '0' NOT NULL,
    user_agent varchar(50) NOT NULL,
    last_activity int(10) unsigned DEFAULT 0 NOT NULL,
    user_data text DEFAULT '' NOT NULL,
    PRIMARY KEY (session_id)
);

Если что-то здесь не так, тоCI не сохраняет информацию о сеансе.

  1. Попробуйте немного больше тестирования сеанса с использованием этого фрагмента в работающей функции контроллера:

$this->load->library('session'); // load session in controller
echo $session_id = $this->session->userdata('session_id'); // print session id to page

Проверкаваши журналы ошибок, чтобы увидеть, загружает ли CI модуль библиотеки сеансов и нет ли ошибок.

Это скорее стратегия отладки для сеансов, чем решение.

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