Проблема с истечением срока сеанса PHP

Извините, я не могу задать вопрос по уже отвеченному вопросу, потому что я только что зарегистрировался.

Моя проблема - истечение срока действия сеанса.

Он работает нормально и выходит из системы после установленного времени.

Моя проблема заключается в том, что когда я не вошел в систему, и я снова посещаю сайт, он перенаправляет на страницу выхода из системы. Я почти уверен, что это оказывает негативное влияние на мое SEO.

Это код, который я использовал.

// ********************************* //
// ************ SESSIONS *********** //

// stops javascript from getting the session id. phpacademy
ini_set('session.cookie_httponly', true);

// Start the session:
session_start();

// http://stackoverflow.com/questions/520237/how-do-i-expire-a-php-session-after-30-minutes
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) {
    // last request was more than 60 minutes ago
    session_destroy();   // destroy session data in storage
    session_unset();     // unset $_SESSION variable for the runtime
    header('Location: logged-out.php');
    }

    $_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp

// http://stackoverflow.com/questions/520237/how-do-i-expire-a-php-session-after-30-minutes
if (!isset($_SESSION['CREATED'])) {
    $_SESSION['CREATED'] = time();
    } else if (time() - $_SESSION['CREATED'] > 1800) {
    // session started more than 30 minutes ago
    session_regenerate_id(true); // change session ID for the current session an invalidate old session ID
    $_SESSION['CREATED'] = time(); // update creation time
    }

// stops them using proxy servers and other ip addresses.
if (isset($_SESSION['last_ip']) === false);{
    $_SESSION['last_ip'] = $_SERVER['REMOTE_ADDR'];
    }

if ($_SESSION['last_ip'] !== $_SERVER['REMOTE_ADDR']){
    session_unset();
    session_destroy();
    }   

// ************ SESSIONS *********** //
// ********************************* //

Что я могу сделать, чтобы прекратить перенаправление на выход из системы, когда я уже вышел из системы???

Я вижу, что это происходит с другими, использующими statcounter, и их страница посещения не является страницей входа?

Пожалуйста, порекомендуйте.


person user3191101    schedule 13.01.2014    source источник
comment
Итак, я полагаю, что это ваше первое условное выражение, вызывающее проблему. пытались ли вы var_dump($_SESSION['LAST_ACTIVITY']) узнать, какое значение он дает, чего вы не ожидаете? Я полагаю, что то, как вы написали свое сравнение времени, может быть проблематичным, если у вас есть $_SESSION['LAST_ACTIVITY'], например, пустое строковое значение (поскольку time() - 0 ВСЕГДА будет > 1800)   -  person Mike Brant    schedule 13.01.2014
comment
Автоматическое перенаправление на страницу входа для защищенного контента — хорошая идея, автоматическое перенаправление на страницу выхода из системы — нет; направлять на страницу выхода из системы только после того, как посетитель действительно вышел из системы (нажал кнопку).   -  person jeroen    schedule 13.01.2014
comment
@jeroen спасибо, у меня есть два состояния выхода из системы, оба с формами входа. Просто один из них покажет, что вы автоматически вышли из системы, и спасибо, что вы благополучно вышли из системы. Оба имеют формы входа. Это все еще проблема?   -  person user3191101    schedule 13.01.2014
comment
@MikeBrant приветствует Майка, я установил его на 5 секунд и играю с ним. На данный момент я снял заголовок «Местоположение», чтобы пока они не перенаправлялись.   -  person user3191101    schedule 13.01.2014


Ответы (1)


Как указано в документации php о сеансах, для очистки/уничтожения сеанса нужно сделать больше, чем просто вызвать session_unset и session_destroy. Чтобы навсегда удалить сеанс, вы также должны уничтожить файл cookie сеанса. Для этого см. здесь

И кстати, вызов session_unset после session_destroy ничего не дает, session_unset следует вызывать перед вызовом session_destroy, потому что после того, как вы уничтожите сеанс, данные, связанные с текущим сеансом, больше не будут доступны (хотя они все еще хранятся на вашем сервере и могут быть доступны снова через файл cookie сеанса).

person elitechief21    schedule 13.01.2014