PHP - предотвратить выход пользователей из системы - PullRequest
1 голос
/ 09 марта 2012

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

Кстати, это клиент, который автоматически подключается каждую минуту.

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

Мои подходящие настройки сеанса:

session.cache_expire       180
session.cookie_lifetime    0
session.gc_maxlifetime     1440
session.use_cookies    On
session.use_only_cookies   Off

Проверка состояния входа в систему выполняется Zend Framework Zend_Auth. Если я останусь в системе более одного дня, это будет означать, что у меня нет ни предела cache_expire, ни времени gc_maxlifetime, верно?

Единственный способ, которым я мог смоделировать выход из системы, который, кажется, происходит, - это установить соединение (установить сеанс), а затем оставить компьютер на ночь отключенным. Когда я снова подключился к Интернету на следующий день, и клиент попытался продолжить подключение (это происходит автоматически), я обнаружил, что вышел из системы.

Итак, мой вопрос (ы).

  1. Это моя оценка того, почему клиенты могут выйти из системы правильно?

  2. Если это так (или даже если нет), что я могу сделать, чтобы предотвратить эти выходы из системы? Значительно расширить различные настройки контроля времени сеанса?

Ответы [ 2 ]

4 голосов
/ 09 марта 2012

Ваша проблема session.cookie_lifetime 0 В основном это означает, что cookie-файл сеанса будет активен только до тех пор, пока клиент не закроет свой браузер.Вы можете просто установить его на какое-то высокое значение, например, год.

См. документацию PHP для получения более подробной информации.

1 голос
/ 09 марта 2012

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

Рассматривали ли вы использование ajax для постоянного обновления времени сеанса за кулисами? Я успешно использовал этот метод несколько раз:

Вот где я нашел идею. Это краткое решение проблемы.

http://brian.moonspot.net/2008/05/14/php-session-cookie-refresh/

Надеюсь, это поможет! A

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