Как проверить сессию пользователя на каждой странице - PullRequest
3 голосов
/ 13 января 2012

Я работаю над этим проектом в Codeigniter и создал сценарий входа и регистрации, но я не знаю, как проверять пользователя на каждой странице. Когда пользователь входит в систему, какие данные хранить в сеансе (Ci session user_data), я могу сравнить их с базой данных на каждой странице, чтобы определить, является ли сеанс действительным? Я использую класс сеанса codeigniter и автоматически сохраняю значения в базе данных. Пожалуйста, помогите мне, я застрял здесь ...

Моя сессия обрабатывается так:
1. Когда пользователь попадает на мою веб-страницу, он получает уникальный хешированный (md5) идентификатор сеанса, который проверяется при каждой загрузке страницы. Если он существует, ничего не делать, если он не генерирует новый. Он меняется каждые 5 минут.
2. Когда пользователь входит в систему, какие данные передать, чтобы я мог сравнить их с базой данных позже (при каждой загрузке страницы)

Я не знаю, безопасно ли хранить только файл cookie is_logged = 1. Я хочу проверять файлы cookie при каждом запросе к серверу.

Ответы [ 3 ]

4 голосов
/ 13 января 2012

При успешном входе в систему вы создаете

$this->session->set_userdata(array('authorized' => true));

Затем вы можете создать библиотеку аутентификации или метод модели, в зависимости от того, что вам подходит, просто проверяет, существуют ли данные этого сеанса.

function is_logged()
{
  return (bool)$this->session->userdata('authorized');
}

если FALSE, пользователь не зарегистрирован, если TRUE, то это так.Вы можете вызывать эту функцию в каждом методе контроллера, который вам нужно поместить за аутентификацией, или в конструкторе контроллера, если вам это нужно для всех методов (например, в панели администратора)

посмотрите, например, какIon Auth, одна из основных библиотек Auth в CI, обрабатывает эту вещь (использует метод logged_in (), который делает то же самое, что и в моем примере кода. Имейте в виду, что сеансы зашифрованы, и если они сохранены в базе данных, безопасность еще выше);https://github.com/benedmunds/CodeIgniter-Ion-Auth/blob/2/libraries/Ion_auth.php

2 голосов
/ 13 января 2012

Сеансы хранятся на сервере, поэтому проверка не требуется. Вам нужно только проверить, что вы положили в сеанс.

Сеансы аутентифицируются пользователем, предоставляющим cookie-файл session_id (PHPSESSID).

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

0 голосов
/ 20 мая 2013

Вы должны написать функцию в помощнике, например session_helper. И в конструкторе вашего класса вызовите этот вспомогательный метод. Если ваш пользователь вошел в систему правильно, он продолжит работу, в противном случае он будет перенаправлен на страницу входа. Ваш помощник должен будь таким

   function session_set()
   {
$ch=&get_instance();
if($ch->session->userdata('your_session_id')=='')
{
    redirect('your_login_page');

}   

и в контроллере вы должны проверить вот так (конструктор)

   session_set();

Надеюсь, это сработает для вас

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