Как проверить, пуст ли сессия PHP? - PullRequest
40 голосов
/ 05 октября 2009

Это плохая практика?

if ($_SESSION['something'] == '')
{
    echo 'the session is empty';
}

Есть ли способ проверить, пусто ли оно или не установлено? Я действительно делаю это:

if (($_SESSION['something'] == '') || (!isset($_SESSION['something'])) {
    echo 'the session is either empty or doesn\'t exist';
}

!isset просто проверяет, существует ли $_SESSION[''] и не проверяет, есть ли значения в массиве или нет

Ответы [ 8 ]

85 голосов
/ 05 октября 2009

Я бы использовал isset и empty:

session_start();
if(isset($_SESSION['blah']) && !empty($_SESSION['blah'])) {
   echo 'Set and not empty, and no undefined index error!';
}

array_key_exists - хорошая альтернатива использованию isset для проверки ключей:

session_start();
if(array_key_exists('blah',$_SESSION) && !empty($_SESSION['blah'])) {
    echo 'Set and not empty, and no undefined index error!';
}

Убедитесь, что вы вызываете session_start перед чтением или записью в массив сеанса.

11 голосов
/ 05 октября 2009

Используйте isset, empty или array_key_exists (особенно для ключей массива) перед доступом к переменной, в существовании которой вы не уверены. Поэтому измените порядок во втором примере:

if (!isset($_SESSION['something']) || $_SESSION['something'] == '')
6 голосов
/ 05 октября 2009

Вы ищете функцию PHP empty()

5 голосов
/ 05 октября 2009

Вы можете использовать функцию count (), чтобы увидеть, сколько записей в массиве $ _SESSION. Это не хорошая практика. Вместо этого вы должны установить идентификатор пользователя (или что-то подобное), чтобы проверить, был ли сеанс инициализирован или нет.

if( !isset($_SESSION['uid']) )
    die( "Login required." );

(при условии, что вы хотите проверить, вошел ли кто-то в систему)

4 голосов
/ 05 октября 2009

Если вы хотите проверить, доступны ли сеансы, вы, вероятно, захотите использовать функцию session_id():

session_id () возвращает идентификатор сеанса для текущего сеанса или пустую строку (""), если нет текущего сеанса (не существует идентификатор текущего сеанса).
0 голосов
/ 31 мая 2019

Я знаю, что это старый, но я столкнулся с проблемой, когда я запускал функцию после проверки, был ли сеанс. Это выдало бы ошибку каждый раз, когда я пытался загрузить страницу после выхода из системы, все еще работал, просто записал страницу с ошибкой. Убедитесь, что вы используете exit (); если вы столкнулись с той же проблемой.

     function sessionexists(){
        if(!empty($_SESSION)){
     return true;
         }else{
     return false;
         }
      }


        if (!sessionexists()){
           redirect("https://www.yoursite.com/");
           exit();
           }else{call_user_func('check_the_page');
         } 
0 голосов
/ 23 декабря 2016

Рекомендуется проверять, существует ли ключ массива, используя встроенную функцию array_key_exists.

0 голосов
/ 27 февраля 2014
if(isset($_SESSION))
{}
else
{}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...