Подтвердить что ты не робот

Как сохранить сеанс без перезагрузки страницы?

У меня странная проблема в моей онлайн-системе управления тестированием.

Некоторым пользователям тестовой формы (test.php) требуется долгое время для ответа на вопрос и отправки формы.

После отправки формы сеанс истек, и пользователь должен снова войти в систему

это не проблема кода

Я устанавливаю это значение в начало всех страниц

ini_set('session.gc_maxlifetime', 18000);

Есть ли способ обновить сеанс evrey за 10 минут без перезагрузки страницы в тестовой форме, чтобы предотвратить истечение срока действия сеанса?

Пожалуйста, помогите мне

Спасибо

4b9b3361

Ответ 1

Вы можете использовать javascript XHR, или, как другие называют его, AJAX.

С помощью ajax вы можете вызвать php script, который обновляет вашу сессию каждые 10 минут.:)


Это насколько я могу перейти к "точной".

Javascript

var refreshSn = function ()
{
    var time = 600000; // 10 mins
    settimeout(
        function ()
        {
        $.ajax({
           url: 'refresh_session.php',
           cache: false,
           complete: function () {refreshSn();}
        });
    },
    time
);
};

refresh_session.php

<?php
session_start();

// store session data
if (isset($_SESSION['id']))
$_SESSION['id'] = $_SESSION['id']; // or if you have any algo.
?>

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

Как закончить сеанс PHP через 30 минут?

Ответ 2

Все, что вам нужно, это (использует jQuery для $.post):

JavaScript (поместите это внутри своей функции onload или что-то в этом роде)

setInterval(function(){$.post('path/to/refresh_session.php');},600000); //refreshes the session every 10 minutes

refresh_session.php

<?php
  session_start();

  if (isset($_SESSION['token'])) { //if you have more session-vars that are needed for login, also check if they are set and refresh them as well
    $_SESSION['token'] = $_SESSION['token'];
  }
?>

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



ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:

Хотя я думаю, что достаточно просто вызвать session_start() в php, если я прочитаю это право (http://nl3.php.net/function.session-start):

Обратный вызов будет извлекать любые существующие данные сеанса (хранится в специальный сериализованный формат) и будет неэтериализован и использоваться для автоматически заполняйте суперкоммуляцию $_SESSION при чтении обратный вызов возвращает сохраненные данные сеанса обратно в обработку сеанса PHP.

И во время тестирования я помещаю вышеуказанный код только на мою страницу посетителя, а не на страницу администратора. Но у меня открылись обе страницы в том же браузере (Chrome), и страница администратора осталась вошедшей в систему, по крайней мере, более часа (больше не проверялась). НО, я не знаю, работает ли он, если вы используете только session_start(), без ручного обновления любого сеанса-var вообще.

В любом случае, мне нравится быть уверенным в том, что необходимые мне сеансовые вазы по-прежнему существуют:)