Определить, существует ли 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
).