Как опознать момент, когда автоматически истекла сессия?

Selfish

Новичок
Как опознать момент, когда автоматически истекла сессия?

Есть ситуация которая нервирует зарегистрированных пользователй моего сайта:

- пользователь входит в систему (стартует соотв. сессия)
- если он выходит по спец. кнопке, которая обрубает сессию, то все ОК
- но если пользователь не работал более 24мин. (длина сессии по-умолчанию), то он, естественно, вываливается в начало.

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

Спасибо!
 

vittorio

Новичок
Идеи:
Дать в заголовках html автообновление каждые 24 минуты.
В скрипте проверять - если сессия сдохла - выводить сообщение
 

vittorio

Новичок
А еще можно поковырять phpMyAdmin и выяснить, как это реализовано там
 

Selfish

Новичок
Автор оригинала: Sam
яваскриптом
Будь добр, объясни что ты имел в виду?

-~{}~ 30.03.06 23:03:

Автор оригинала: vittorio
Идеи:
Дать в заголовках html автообновление каждые 24 минуты.
В скрипте проверять - если сессия сдохла - выводить сообщение
А еще можно поковырять phpMyAdmin и выяснить, как это реализовано там
Весь вопрос в том, чтобы понять, что сессия была прервана автоматически, а не потому что он вышел сам...
 

Фанат

oncle terrible
Команда форума
Дать в заголовках html автообновление
vittorio
не надо писать глупостей, ПОЖАЛУЙСТА.

Selfish
тебя интересвет, всего лишь, чтобы по истечении сессии и попытке запросить что-то с сайта, человека кидало не "в начало", а на красивое сообщение о том, что сессия истекла?
 

Selfish

Новичок
Автор оригинала: Фанат
Selfish
тебя интересвет, всего лишь, чтобы по истечении сессии и попытке запросить что-то с сайта, человека кидало не "в начало", а на красивое сообщение о том, что сессия истекла?
Да. Не принципиально куда "кидает", главное закрыть пользователю доступ и выдать сообщение почему он прекращен (типа, "неактивность пользователя, давайте авторизируйтесь заново").
 

Фанат

oncle terrible
Команда форума
то есть, вся твоя проблема состоит в том, что ты не можешь написать строчку кода типа
if (isset($_REQUEST[session_name()]) AND !isset($_SESSION['auth'])) die("Сессия аварийно завершена");
?
 

vittorio

Новичок
Фанат
Автор оригинала: Фанат
vittorio
не надо писать глупостей, ПОЖАЛУЙСТА.
Рискую нарваться, но все же хотел бы уточнить, в чем глупость.
Я имел в виду нечто подобное -
<META http-eqiuv="REFRESH" Content="1440; URL=thissite.php">
Т.о. через 24 минуты отсутствия пользователь возвращается к странице и видит что-то типа
"Дальнейшая работа невозможна - время сессии истекло. Перейдите на страницу авторизации"
 

Фанат

oncle terrible
Команда форума
глупость в том, что не нужно обновлять страницы без ведома пользователя.
у него там может быт набран текст, который у хорошего вебмастера не пропадёт, если даже сессия протухнет (см. мейл.ру)

а вот если устраивать чат с мельканием, то тогда пплоды получасовой работы пропадут гарантированно
 

Selfish

Новичок
Автор оригинала: Фанат
то есть, вся твоя проблема состоит в том, что ты не можешь написать строчку кода типа
if (isset($_REQUEST[session_name()]) AND !isset($_SESSION['auth'])) die("Сессия аварийно завершена");
?
OK..... я не разобрался с session_name.
Фанат, спасибо за наводку!!

-~{}~ 31.03.06 00:02:

Автор оригинала: Фанат
то есть, вся твоя проблема состоит в том, что ты не можешь написать строчку кода типа
if (isset($_REQUEST[session_name()]) AND !isset($_SESSION['auth'])) die("Сессия аварийно завершена");
?
ОК.
Возможно я что-то упускаю из вида, но в моем случае, мне страница ВСЕГДА делает die() (первое условие всегда верно?). Где именно должно быть использовано такое выражение?
 

Фанат

oncle terrible
Команда форума
закрой браузер и открой его обратно.
первое условие всегда верно, если сессия уже стартовала в этом сеансе.
такое выражение может быть использовано везде, кроме страницы авторизации.
 

Selfish

Новичок
Автор оригинала: Фанат
закрой браузер и открой его обратно.
первое условие всегда верно, если сессия уже стартовала в этом сеансе.
такое выражение может быть использовано везде, кроме страницы авторизации.
Спасибо!
Буду экспериментировать!

-~{}~ 05.04.06 12:57:

Автор оригинала: Фанат
закрой браузер и открой его обратно.
первое условие всегда верно, если сессия уже стартовала в этом сеансе.
такое выражение может быть использовано везде, кроме страницы авторизации.
Слушай, не разобрался я...

Можно тебя попросить привести пример или дать ссылку на пример?
 

Фанат

oncle terrible
Команда форума
у тебя страницы могут просматривать как авторизованные юзеры, так и не авторизованные?
а сессию ты всегда стартуешь автоматом?
 

Selfish

Новичок
Автор оригинала: Фанат
у тебя страницы могут просматривать как авторизованные юзеры, так и не авторизованные?
а сессию ты всегда стартуешь автоматом?
Картина такая (очень кратко и приблизительно):
1. Есть главная страница (index.php) в которой проводится авторизация в ней-же определяется что отображать в настоящий момент, в том числе отображать "закрытый" контент или страницы для общего доступа. Т.е. "все в одном". (В этой странице - форма логин/пароль которая направлятся на эту-же самую страницу.)
2. В странице есть проверка на текущее состояние:
- если есть user_id, то загружается переданная (по указателю в переменной) закрытая страница
- если нет user_id и нет данных от формы, то подзагружаем для отображения блок с login-формой, т.е. мы как-бы выпали в открытй раздел и нас не пускает в закрытый
- если нет user_id НО есть данные от формы, то их проверяем и в завис. от результата или выкидываем в логин-раздел или в закрытый раздел
3. Сессия запускается только если нет установленного $_SESSION["user_id"], и переданы верные данные авторизации = верный вход.
 

Фанат

oncle terrible
Команда форума
тогда я не понимаю, почему у тебя не работает.
скажи, а логику механизма ты понял?
 

Selfish

Новичок
Автор оригинала: Фанат
тогда я не понимаю, почему у тебя не работает.
скажи, а логику механизма ты понял?
Логику твоего механизм видимо нет ( + session.name у меня установлено всегда = "PHPSESSID")...
 

Фанат

oncle terrible
Команда форума
при чём здесь session.name, если речь идёт о $_REQUEST[session_name()]?

ну если ты не понял почему нельзя было сразу сказать?
зачем надо было говорить спасибо?
Рефлекс - увидел готовый код, и больше ничего не надо?

логика такая.
мы проверяем - стартовала ли сессия в этом сеансе (isset($_REQUEST[session_name()]))
ведь если ты сессию не стартовал, то и протухать нечему - правильно? то есть, должно выполниться это условие - браузер прислал нам идентификатор сессии.
второе условие - в сессии не содержится признака авторизации. то есть, мы имеем сессию, но не имеем в ней авторизации. Это и есть признак того, что сессия протухла.
правильно?
 
Сверху