Ошибка при уничтожении сессии в PHP - PullRequest
7 голосов
/ 01 июля 2011

У меня проблема с обработкой сессии в PHP (версия 5.2.10).Я использую следующие функции для входа в систему, выхода из системы и проверки сеансов.

login()
{
    session_set_cookie_params(0);
    session_start();
    session_regenerate_id(true);
    $_SESSION['user_id']
}

validate_session()
{
    session_set_cookie_params(0);
    session_start();
    if (isset($_SESSION['user_id']) === FALSE) {
        session_destroy();
        logout();
        header("Location: login_page");
    }
}

logout()
{
    session_set_cookie_params(0);
    session_start();
    $_SESSION = array();
    setcookie(session_name(), '', time() - 3600, '/');
    session_destroy();
}

Каждая страница сначала вызывает функцию validate_session ().Если сеанс недействителен, он перенаправляет на страницу входа.Функция login () используется для создания сеанса для пользователя.Когда пользователь нажимает кнопку выхода из системы, вызывается функция logout () для уничтожения сеанса.

Проблема заключается в следующем: случайным образом функция logout () выдает предупреждение:
Предупреждение: session_destroy (): SessionОшибка уничтожения объекта

Я получаю это предупреждение очень редко.Как из 20-30 звонков, чтобы выйти, я получаю это один раз.Есть мысли?

Я занимаюсь разработкой на компьютере с Windows XP.

Обновление: сеансы хранятся в файловой системе.
Путь: C: \ WINDOWS \ Temp

Ответы [ 3 ]

2 голосов
/ 02 июля 2011

Вызывается ли logout () в другом месте, чем в validate_session ()?Если нет, проблема может заключаться в вызове session_destroy () перед выходом из системы ()

. Вы можете попробовать это:

validate_session()
{
    session_set_cookie_params(0);
    session_start();
    if ( !isset( $_SESSION['user_id'] ) ) {
        logout();
        header("Location: login_page");
    }
}

logout()
{
    $_SESSION = array();
    setcookie(session_name(), '', time() - 3600, '/');
    session_destroy();
}
0 голосов
/ 01 июля 2011

Найдено что-то , что может быть полезно по этой теме. Основные проблемы:

  1. Допустим ли с самого начала сеанс - каково возвращаемое значение из session_start()?
  2. Существуют ли файлы сеансов в PHP.ini session.save_path и могут быть удалены.

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

0 голосов
/ 01 июля 2011

Как вы храните свои сессии?Если это файл, это может быть ошибка тайм-аута или прав доступа?

Кроме того, я задаюсь вопросом, вызывает ли регенерат_id функцию уничтожения для поиска сеанса, который технически там больше не существует.Вы пытались установить этот логический аргумент в false в функции регенерации?

У нас была эта проблема в приложении CakePHP, но мы исправили ее, переместив ее в настройки Cake.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...