2015-02-12 2 views
0

Я пытаюсь освободить/отключенный переменный сеанс через 2 минуты через unsetsession.php:Почему PHP обновить страницу релиз сессия переменной

<?php 

    session_start(); 

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 120)) { 
    // last request was more than 2 minutes ago 
    unset($_SESSION['logged_in']);  // unset $_SESSION variable for the run-time 
    unset($_SESSION['LAST_ACTIVITY']); 
    session_unset();  // unset $_SESSION variable for the run-time 
    session_destroy(); // destroy session data in storage 
} 
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp 

?> 

где переменные сессии являются:

$_SESSION['logged_in'] = 1; 
$_SESSION['LAST_ACTIVITY'] = time(); 

Однако, переменные сеанса не отключаются, но не обновляются, когда я обновляю страницу. Страница вызывает вызов файла unsetsession.php. Почему сеанс не отключается через 2 минуты?

EDIT: На странице file.php есть <?php include("includes/unsetsession.php") ?> наверху страницы. Когда file.php обновлен в браузере, значение переменной сеанса $_SESSION['logged_in'] = 1; будет изменено на 0. Оно не изменится через 2 минуты. Он изменяется только на 0, когда страница обновляется.

Я проверяю значение, запустив getsession.php в браузере, который:

<?php 
    session_start(); 
    if(isset($_SESSION['logged_in'])) 
    echo "1"; 
    else 
    echo "0"; 
?> 
+0

Они не ошибаются. Оператор '-' имеет более высокий приоритет, чем'> ', поэтому он в порядке – Angivare

+0

@developerwjk, который он уничтожает для меня. У меня есть вызов unsetsession.php на странице как ''. Также значение не возвращается после истечения 2-минутного срока. Любые указатели? – Sarah

+1

Что вы подразумеваете под словом «они не сбрасываются, но не отображаются, когда я обновляю страницу»? Они должны быть отменены, если вы обновите страницу _and_, обновление было сделано через две минуты после того, как переменная была установлена. Редактирование: ваш php-скрипт вызывается только один раз, когда загружается ваша страница. Вот почему он только уничтожает переменную при ее обновлении: она не запускает скрипт, если вы его не обновляете. – Angivare

ответ

2

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

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

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


Так что нет действительно путь на не найти решение вашей проблемы прямо сейчас, прежде чем дать нам больше информации о том, что вы пытаетесь достичь.

Некоторые решения будут использовать javascript для регулярного запроса AJAX к unsetsession.php, например, или просто позволить это как есть: сеанс не будет отменен, пока вы не загрузите страницу. Это не проблема, большинство сайтов делают это именно так.

+0

Итак, вы имеете в виду, что нет возможности истечь сеанс, скажем, для пользователя, который когда-то простаивал на веб-сайте? также, почему сеанс истекает и/или перед значением интервала 2, когда мы перемещаемся дальше, где на веб-сайте? – Sarah

+0

Сеанс не истекает, когда он находится в режиме ожидания, но при просмотре страницы после простоя (но вам нужно будет включить unsetsession.php на любую страницу на своем веб-сайте). Это более или менее то же самое. Просто подумайте об этом так: вы на странице. Вы ждете 2 минуты, и ничего не происходит. Но если вы попытаетесь перейти на другую страницу, вы будете отключены. Теперь вы можете сделать это, чтобы вы отключились _while_, когда вы простаиваете, используя AJAX, как указано в моем ответе. – Angivare

+1

@Sarah Если переменная истекает до 2 минут даже при перезагрузке, вам нужно указать, что в этой проблеме. Также, как уже упоминалось, вы можете использовать AJAX для вызова PHP-файла, так что, например, вы можете иметь 'setTimeout()', который может вызвать PHP, который отключает сеансы. –