2012-01-13 5 views
2

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

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

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

+0

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

ответ

4

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

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

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

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

Если FALSE, пользователь не зарегистрирован, если ИСТИННО. Вы можете вызвать эту функцию по методу каждого контроллера, который вам нужен, чтобы разместить аутентификацию или в конструкторе controllr, если вам это нужно для всех методов (например, панели администратора)

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

+0

теоретически, если локальный пользователь изменяет свои файлы cookie и устанавливает «authorized» = true, даже если он не зарегистрирован, он сможет войти в систему? Также можно изменить местные файлы cookie? – slimDeviant

+0

файлы cookie перечислены, эта операция должна быть не такой простой. BEsides, вы храните сеансы в базе данных, поэтому файлы cookie не задействованы –

+0

, поэтому давайте скажем, что у меня есть метод auth(), действующий как класс __construct, который проверяет сеанс перед вызовом любого другого метода. Должен ли я проверять базу данных, если пользователь вошел в систему (authorize = 1) или против файлов cookie? также вы могли бы более четко объяснить свое второе предложение. Спасибо – slimDeviant

1

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

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

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

+0

Я отредактировал вопрос, поэтому проверьте его – slimDeviant

+0

Сеанс CI - это файлы cookie, а не родной php $ _SESSION массив, и OP сказал, что он использует библиотеку сессий CI –

+0

Да .. он редактировал свой вопрос. Мой ответ относится к обычной обработке PHP. – Halcyon

0

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

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

} 

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

session_set(); 

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

Смежные вопросы