Как работают сеансы в Codeigniter - PullRequest
6 голосов
/ 11 февраля 2012

Я пытаюсь выяснить, как сеансы работают в Codeigniter. Читая онлайн-руководство, я вижу следующее:

Если данные сеансов не существуют (или если срок их действия истек), новый сеанс будет создан и сохранен в файле cookie. Если сеанс существует, его информация будет обновлена, а файл cookie будет обновлен. С каждым обновлением идентификатор сессии будет регенерироваться.

и

Примечание. Сеансовые куки-файлы по умолчанию обновляются каждые пять минут, чтобы снизить нагрузку на процессор. Если вы несколько раз перезагрузите страницу, вы заметите, что время «последнего действия» обновляется, только если прошло пять или более минут с момента последней записи файла cookie. Это время настраивается путем изменения строки $ config ['sess_time_to_update'] в вашем файле system / config / config.php.

Вопрос :

  1. Какая информация обновляется, если сеанс существует при загрузке страницы с классом сеанса? Этот идентификатор сеанса хранится в файле cookie или данные самого сеанса хранятся в базе данных?
  2. Сессионные куки обновляются только каждые 5 минут. Что если пользователь перейдет со страницы A на страницу B в течение 5 минут, и для этого потребуется добавить новые данные сеанса? Логически данные сеанса должны быть обновлены, поэтому я полагаю, что неправильно понимаю эту строку ... В этом случае я предполагаю, что cookie сеанса получает новый идентификатор сеанса каждые 5 минут.

Любые уточнения помогут!

1 Ответ

2 голосов
/ 12 февраля 2012

Да, это идентификатор сессии, сохраненный в куки. Это восстанавливается каждые 5 минут. И когда пришло время для регенерации, сначала он получит данные текущего сеанса, а затем назначит их новому идентификатору сеанса.

код из библиотеки сеансов CI, функция sess_update ():

// Save the old session id so we know which record to
// update in the database if we need it
$old_sessid = $this->userdata['session_id'];
$new_sessid = '';
while (strlen($new_sessid) < 32)
{
    $new_sessid .= mt_rand(0, mt_getrandmax());
}

// To make the session ID even more secure we'll combine it with the user's IP
$new_sessid .= $this->CI->input->ip_address();

// Turn it into a hash
$new_sessid = md5(uniqid($new_sessid, TRUE));

// Update the session data in the session data array
$this->userdata['session_id'] = $new_sessid;
$this->userdata['last_activity'] = $this->now;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...