2009-10-05 7 views
36

Является ли эта плохая практика?Как проверить, пустой ли сеанс PHP?

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

Есть ли способ проверить, является ли его пустым или не установлен? Я actualy делаю это:

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

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

ответ

76

Я хотел бы использовать 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 перед чтением или записью в массив сеансов.

+5

Вам не нужно использовать isset, если вы уже используете пустой. empty также проверит, существует ли переменная, т. е. не имеет значения null/undefined. – knittl

+0

Не нужно использовать isset AND empty. –

+5

@knittl Это хорошая практика, чтобы убедиться, что у вас есть переменная перед тестированием, чтобы убедиться, что она пуста. – random

6

вы ищете empty() функции РНР

+15

пустой опасен, поскольку он также сообщает false, 0 и «0» как пустые. – OIS

5

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

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

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

10

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

if (!isset($_SESSION['something']) || $_SESSION['something'] == '') 
4

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

session_id() возвращает идентификатор сессии для текущей сессии или пустую строку (""), если текущий сеанс отсутствует (текущий идентификатор сеанса отсутствует).
-1

Это не плохая практика. Но вы можете получить сообщение об ошибке, как

неопределенного индекс (ключ вы определили)

Так что лучше практик, чтобы проверить, существует ли ключ массива, используя встроенный в array_key_exists функции.

Смежные вопросы