Я искал весь день для PHP или JavaScript-решения для этого.
Я хотел бы предупредить пользователя о том, что их сеанс близок к тайм-ауту (всплывающее окно), возможность продлить время сеанса.
Вот визуальный, если вам нужен он на этой странице
РЕДАКТИРОВАТЬ:
jQuery является основой, если это помогает
Это относительно легко:
Создайте таймер JavaScript, который запускается (продолжительность сеанса – 5 минут), используя setTimeout
Попросите функцию setTimeout
отобразить диалоговое окно подтверждения, например, используя диалоговое окно JQuery UI Dialog
Если пользователь хочет продлить сеанс, сделайте запрос Ajax в файл PHP. Если файл использует сеансы, это будет работать, чтобы «коснуться» времени сеанса
После выполнения запроса установите еще один setTimeout
который будет срабатывать, когда сессия снова закончится.
Я бы предложил другой подход; просто обновите сеанс для пользователя в любом случае. Большинство нежелательных сеансов смерти происходят из-за
и с диалогом подтверждения, сеанс уже был бы мертв к моменту, когда ваш пользователь вернется – добавив только путаницу.
Вместо:
var refresh_session = function () { $.get("/refresh_session.php"); }, fifteen_minutes = 15 * 60 * 1000; setInterval(refresh_session, fifteen_minutes);
-> счастливые пользователи! 🙂
Вы можете обойти проблему, имея скрипт, который возвращает изображение размером 1 × 1 на таймере JS. Идея заключается в том, что вы начинаете с PHP-скрипта, подобного этому (не уверен, что заголовок вызывает здесь именно правильно ..):
header("ContentType: image/gif"); passthru("my-1x1.gif");
Теперь, если функция javascript setInterval
вызывает этот скрипт на подходящем интервале (т.е. меньше интервала GC сеанса). Поскольку изображение подается с PHP, оно обновляет ваш сеанс, поэтому теоретически сеансы пользователя не заканчиваются до тех пор, пока они остаются на вашем сайте.