2009-06-17 2 views
0

Можно создать дубликат:
Automatically re-direct a user when session Times out or goes idle…PHP Session Expire Перенаправление

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

Есть ли способ, чтобы страница автоматически перенаправлялась на страницу входа после окончания сеанса?

Спасибо!

EDIT :::

Из рассмотрения ранее заданный вопрос нашел Here я использовал принятый ответ для этого приложения. Спасибо всем за ваши предложения.

+0

Возможный дубликат: http://stackoverflow.com/questions/1003001/automatically-re-direct-a-user-when-session-times-out-or-goes-idle – Gumbo

+0

Вы правы, это дублируем, спасибо. –

+0

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

ответ

0

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

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

0

Вы можете использовать javascript, чтобы периодически проверять, закончился ли сеанс, а затем перенаправить, если он есть. Реализация зависит от деталей вашей системы аутентификации, но в основном будет включать время истечения срока действия сеанса на страницу, а затем сравнение времени истечения срока действия текущего времени до истечения срока действия сеанса.

EDIT: Пример

Я использую prototype.js, так что если вы используете какой-то другой основы (или просто необработанный JS) вам придется адаптировать его.

<input type="hidden" id="expiration" value="<?php echo(time() + SESSION_TTL) ?>" />

<script type="text/javascript"> 
    new PeriodicalExecuter(function(pe) { 
    if(getTime() >= parseInt($('expiration'))) { 
     window.location = "http://session.expired.com" 
    } 
    } 
</script> 

должны сделать что-то вдоль линий, что вы хотите.

+0

Я очень новичок в javascript, возможно, вы можете привести пример? –

1

Вы можете использовать тег meta-refresh, например. перенаправлять через 10 минут:

<meta http-equiv="refresh" content="600;url=http://example.com/" /> 

Это не очень удобный способ для обработки сеанса истечения срока действия, в частности, для случая использования вы выделенные.

Лучшей техникой было бы отслеживать активность пользователя с помощью Javascript, набирая события нажатия и mousemove. Каждую минуту, если была какая-то активность, сгорите XMLHttpRequest, чтобы сохранить сеанс в активном режиме.

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

Таким образом, люди, выполняющие ввод данных или (независимо от формы), не теряют свою сессию, если они занимают свое время и не перенаправляются, если они покидают свой стол на обед!

+0

Это немного связано с тем, что я ищу. –

+0

Но спасибо :) –

+0

Я отредактировал его, чтобы включить простейшую возможную вещь, которая сработает для вас :) –

1

Функция PHP ini_get может использоваться для чтения времени жизни сеанса при создании страницы.
JavaScript может использоваться для выполнения перенаправления по истечении срока действия сеанса.

// javascript 
var logout = function() { 
    //redirect code 
}; 
setTimeout(logout, <%= 1000 * (int)ini_get("session.gc_maxlifetime") %>); 
0

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

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