Code Igniter - как перенаправить пользователя после входа в систему? - PullRequest
2 голосов
/ 08 декабря 2010

У меня есть проект Code Igniter, использующий сеансы с поддержкой базы данных. Веб-приложение защищено паролем. Это означает, что у меня есть абстрактный контроллер, проверяющий, вошел ли пользователь в систему, прежде чем я позволю ему увидеть какие-либо страницы, кроме формы для входа.

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

Как это происходит: пользователь вышел из системы и набрал URL. Приложение обнаруживает, что он не вошел в систему, поэтому отправьте его на страницу входа и создайте строку в таблице ci_session. В то же время я сохраняю URL, введенный пользователем в объект сеанса, используя либо flashdata, либо userdata. Моя проблема в том, что, как только пользователь войдет в систему, приложение создаст новую строку в базе данных, то есть новый сеанс, полностью игнорируя значения, которые я сохранял ранее.

Разве не должно быть по одной строке за сеанс?

Ответы [ 4 ]

2 голосов
/ 09 декабря 2010

Я думаю, вы не понимаете, как работает сеанс между браузером и вашим веб-приложением. Когда пользователь открывает вашу страницу входа, ему присваивается уникальный идентификатор сеанса, который отслеживает codeigniter. Если срок действия вашего сеанса не истек, либо из-за принудительного выхода из системы, либо из-за ваших собственных настроек истечения сеанса, codeigniter должен записывать только 1 строку на уникальный сеанс в вашей базе данных. Убедитесь, что ваша переменная sess_expiration в config.php установлена ​​на что-то реалистичное.

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

2 голосов
/ 08 декабря 2010

CI URL Helper имеет функцию перенаправления, которую вы можете использовать. http://codeigniter.com/user_guide/helpers/url_helper.html

Выполняет ли «перенаправление заголовка» на указанный локальный URI. Как и другие функции этого помощника, он предназначен для перенаправления на локальный URL-адрес вашего сайта. Вы не будете указывать полный URL-адрес сайта, а просто сегменты URI контроллера, на который хотите направить. Функция создаст URL на основе значений вашего файла конфигурации.

Необязательный второй параметр позволяет выбирать метод «location» (по умолчанию) или метод «refresh». Расположение быстрее, но на серверах Windows это иногда может быть проблемой. Необязательный третий параметр позволяет отправлять определенный код ответа HTTP - его можно использовать, например, для создания перенаправлений 301 для поисковых систем. Код ответа по умолчанию - 302. Третий параметр доступен только с перенаправлениями «location», но не «refresh». Примеры:

if ($logged_in == FALSE)
{
     redirect('/login/form/', 'refresh');
}

// with 301 redirect
redirect('/article/13', 'location', 301);
0 голосов
/ 08 декабря 2010

Решено.

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

Я изменил имя своего файла cookie на то, что не содержало подчеркивания и вуаля, исправлено.Один сеанс на запрос, и все работает как надо.

0 голосов
/ 08 декабря 2010

Вы можете использовать что-то вроде этого.

Когда пользователь пытается получить доступ к странице типа

http://test.com/userpage.php

Если он не вошел в систему, перенаправьте его на

http://test.com/login.php?redirectpage=userpage.php

(Это перенаправление будет выполнено userpage.php после проверки состояния входа в систему из файла cookie или сеанса.)

Страница входа имеет значение «redirectpage», и как только пользователь входит на страницу входа, перенаправьте его на страницу, которую он ранее пытался посетить.

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

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