Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как определить, что Сессия истекла (по времени) и вывести предупреждение?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
LShark
Отправлено: 22 Февраля, 2013 - 18:56:33
Post Id



Частый гость


Покинул форум
Сообщений всего: 240
Дата рег-ции: Нояб. 2012  


Помог: 1 раз(а)




Выставлено ограничение сессии по времени в 2 часа.
Как только она истекает, происходит автоматический разлогин юзера.

Однако есть люди, мягко говоря, медленно думающие и работающие, поэтому они с перерывами могут занудно долго набирать текст в форму и ткнуть "Далее" через 2,5 часа после начала сессии. И тогда вместо размещения их неэпического труда сайт выкидывает им окошко логина.
Груда кирпичей, повторный логин и снова набор текста.

Где то на сайте видел, что если долго сидишь и сессия разрегистрировалась, то выводится предупреждение об этом. Но вот забыл где. Просто ушел на дело, вернулся -висит сообщение про разлогин.

Как это сделать? Не ставить же тупо джаваскрипт счетчик времени и после истечения выводить предупреждение?


-----
Истина прежде всего в том, что...
 
 Top
NoPaper
Отправлено: 22 Февраля, 2013 - 19:00:10
Post Id



Посетитель


Покинул форум
Сообщений всего: 315
Дата рег-ции: Янв. 2012  
Откуда: Минск


Помог: 9 раз(а)




LShark пишет:
Не ставить же тупо джаваскрипт счетчик времени и после истечения выводить предупреждение?

Ну почему же тупо? Таймер на минуту, ajax'ом обращаться к скрипту, проверять на наличие сессии.

Вариант 2. Опять таймер. Но только уже не обращаться к серверу, а проверять куки на 'живучесть', т.е. сравнивать expires сессии и текущее время.
 
 Top
LShark
Отправлено: 22 Февраля, 2013 - 21:26:02
Post Id



Частый гость


Покинул форум
Сообщений всего: 240
Дата рег-ции: Нояб. 2012  


Помог: 1 раз(а)




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

Но этот вариант не катит, если работать в 2 окна - в одном напишет, что все уже, а во втором сессия будет активна и ее время не истечет.


-----
Истина прежде всего в том, что...
 
 Top
DeepVarvar Супермодератор
Отправлено: 22 Февраля, 2013 - 22:46:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Мне кажется у вас тут попахивает легким бредком.
Вот смысл:
PHP:
скопировать код в буфер обмена
  1. $member = array(
  2.   "id"=>null,
  3.   "name"=>"Гость",
  4.   "lastname"=>null,
  5.   "hash"=>null
  6. );
  7.  
  8. if (isset($_SESSION['member'])) {
  9.   $member = $_SESSION['member'];
  10.   setcookie("member", $member['hash'], 86400, "/");
  11. } else if (isset($_GET['logout'])) {
  12.     unset($_SESSION['member']);
  13.     setcookie("member", "", -1, "/");
  14.     header("Location: /кудатотам");
  15.     exit();
  16.   }
  17. } else if (isset($_POST['login'])) {
  18.   if ($getMember = "попытка получить юзера по форме входа") {
  19.     $member = $_SESSION['member'] = $getMember;
  20.     setcookie("member", $member['hash'], 86400, "/");
  21.     header("Location: /кудатотам");
  22.     exit();
  23.   }
  24. } else if (isset($_COOKIE['member'])) {
  25.   if ($checkMember = "попытка получить юзера по хешу из БД") {
  26.     $member = $_SESSION['member'] = $checkMember;
  27.     setcookie("member", $member['hash'], 86400, "/");
  28.   }
  29. }
 
 Top
vanicon
Отправлено: 22 Февраля, 2013 - 23:32:23
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


Помог: 17 раз(а)




LShark пишет:
Но этот вариант не катит, если работать в 2 окна - в одном напишет, что все уже, а во втором сессия будет активна и ее время не истечет.

Такой же отсчет времени, только отсчитываешь время считав его с сервера.
Поясню:
в сессию загоняешь время авторизации
и при загрузке страницы от этого времени и отсчитываешь


-----
Так было, так есть и так будет
 
 Top
DeepVarvar Супермодератор
Отправлено: 23 Февраля, 2013 - 00:07:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




vanicon пишет:
в сессию загоняешь время авторизации
И тут сессия кончается.. А? Что?? Где???
 
 Top
vanicon
Отправлено: 23 Февраля, 2013 - 00:51:04
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


Помог: 17 раз(а)




DeepVarvar пишет:
И тут сессия кончается..

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


-----
Так было, так есть и так будет
 
 Top
DeepVarvar Супермодератор
Отправлено: 23 Февраля, 2013 - 06:17:20
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




vanicon пишет:
и при загрузке страницы от этого времени и отсчитываешь
Я прекрасно понял, а вот вы - нет. Страницу то никто не загружает..
А уборщик уже прошел, файлики сессий потер.. Смысл хранить то что профукают?
 
 Top
LShark
Отправлено: 23 Февраля, 2013 - 08:25:33
Post Id



Частый гость


Покинул форум
Сообщений всего: 240
Дата рег-ции: Нояб. 2012  


Помог: 1 раз(а)




Проблема то вот в чем:
1. Пока ТЮ (тупой/тормозной юзер) бродит по конторе/пьет чай/подвергается орально-анальному воздействию у начальства или вообще ушел домой, на его компе, естественно, висит открытая страница (а в случае с Оперой - даже если страница закрыта, но не разлогинена, то сессия продолжает в ней висеть, если сама Опера не закрывалась).
2. Приходит ХЖП (хитрожопый поганец) и от имени ТЮ делает всякую пакость. Далее по логам ТЮ получает люлей вместо ХЖП.

Для этого сделан разлогин по времени. Это не спасет, конечно, полностью, но уменьшит риск.

Но вот продолжение пункта 1.
3. ТЮ (а чаще всего это лурковская ТП) приходит и продолжает то, что она набирала "вчера" (да, такой прикол тоже встречается - оставляют включенными комп, чтобы завтра добрать и отправить, свет вырубают редко).
4. Тык "Далее" - и на экране радостное сообщение, что надо залогиниться. Груда кирпичей и все такое.

Поэтому ДВЕ задачи:
1. НЕЛЬЗЯ автоматически воссоздавать сессию, если разлогин УЖЕ произошел (чтобы ХЖП не смог продолжить работать под аккаунтом ТЮ), если эта ТП оставила окно открытым или Оперу незакрытой.
2. Необходимо, чтобы когда сессия потерлась на сервере, у юзера выпадало окно-предупреждение, возможно с окном Логина, так как после Логина во втором окне (по крайней мере в Опере) данные из первого окна уйдут уже по новой сессии. Или просто предупреждение - типа скопируй, хотя бы, и перелогинься.


-----
Истина прежде всего в том, что...
 
 Top
vanicon
Отправлено: 23 Февраля, 2013 - 11:21:01
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


Помог: 17 раз(а)




Что - то я все еще не могу понять почему мой вариант решения не подойдет.
Распишу все подробнее, так сказать весь процесс:
1. Пользователь входит в систему, в сессию записывается текущий time...
2. Пользователь переходит на страницу добавления статьи (или чего -то там) и со стороны сервера смотрится этот записанный time, есть он есть то передаем его javascript(то есть клиенту) для отсчета времени, если его нет то то сразу перекидываем его на страницу авторизации..
3. На клиенте просто идет отсчет определенного времени (2 часа например), и как 2 часа прошло то может выскакивать окно, или еще что-то там.
А сервер через 2 часа может сам почистить сессии и т.д
Надеюсь я все доступно написал...
(Добавление)
И это был первый вариант.
Вот второй:
Можно через каждые 10 минут сохранять статью в черновик, многие cms так делают...
А если например сохранить не удалось, потому что тупо сессия кончилась, то можно и сообщение выдать....


-----
Так было, так есть и так будет
 
 Top
Мелкий Супермодератор
Отправлено: 23 Февраля, 2013 - 11:30:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




LShark пишет:
и на экране радостное сообщение, что надо залогиниться

Что мешает стартовать сессию, записать туда все пришедшие данные, и попросить залогиниться?
После авторизации выполнить запрос или воскресить форму со всеми данными.

LShark пишет:
Для этого сделан разлогин по времени.

Для этого сделана блокировка экрана. Если юзер не понимает, для чего она - делается безобидная гадостная гадость, пока отошёл. И юзер понимает, для чего это.


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB