Определить, существует ли PHP-сессия

Facebook теперь предлагает подписки для пользователей, чтобы вы могли получать обновления изменений в реальном времени. Если мое приложение получит обновление, я планирую сохранить его в базе данных. Я также хотел бы определить, существует ли их сессия. Если это произойдет, то я мог бы обновить данные там же.

Мои идентификаторы сеансов MD5(fb_id + secret), поэтому я мог легко редактировать их сеанс. Вопрос в том, как я могу определить, существует ли сессия.

7 ответов

Решение

Согласно руководству по PHP.net:

Если $_SESSION (или же $HTTP_SESSION_VARS для PHP 4.0.6 или менее), используйте isset() проверить, что переменная зарегистрирована в $_SESSION,

Я использую комбинированную версию:

if(session_id() == '' || !isset($_SESSION)) {
    // session isn't started
    session_start();
}

Если вы используете php 5.4+, лучше использовать session_status ():

if (session_status() == PHP_SESSION_ACTIVE) {
  echo 'Session is active';
}
  • PHP_SESSION_DISABLED если сеансы отключены.
  • PHP_SESSION_NONE если сеансы включены, но ни один не существует.
  • PHP_SESSION_ACTIVE если сеансы включены, и один существует.

Какой метод используется для проверки, существует ли СЕССИЯ? Ответ: isset($_SESSION['имя_переменной'])

Пример: isset($_SESSION['id'])

function is_session_started()
{
    if ( php_sapi_name() !== 'cli' ) {
        if ( version_compare(phpversion(), '5.4.0', '>=') ) {
            return session_status() === PHP_SESSION_ACTIVE ? TRUE : FALSE;
        } else {
            return session_id() === '' ? FALSE : TRUE;
        }
    }
    return FALSE;
}

// Example
if ( is_session_started() === FALSE ) session_start();

Самый короткий и простой ответ

      $_SESSION['variable_name']?? die;

это простой способ сделать

      if(isset($_session['variable'])){
      // do something
 }else{
     die;
 }

Исходный код от Сабри Сулеймана .

Сделал немного красивее:

      function is_session_started() {

    if ( php_sapi_name() === 'cli' )
        return false;

    return version_compare( phpversion(), '5.4.0', '>=' )
        ? session_status() === PHP_SESSION_ACTIVE
        : session_id() !== '';
}

Первое условие проверяет используемый серверный API . Если используется интерфейс командной строки, функция возвращает false.

Затем мы возвращаем логический результат в зависимости от используемой версии PHP .

В древней истории просто нужно было проверить session_id(). Если это пустая строка, сеанс не запускается. В противном случае это так.

Начиная с 5.4 до нынешней 8.0 норм стоит проверить session_status(). Если это не так PHP_SESSION_ACTIVE, то либо сеанс еще не запущен ( PHP_SESSION_NONE) или сеансы вообще недоступны ( PHP_SESSION_DISABLED).

Другие вопросы по тегам