2009-10-05 37 views
36

Czy to jest zła praktyka?Jak sprawdzić, czy sesja PHP jest pusta?

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

Czy istnieje sposób sprawdzenia, czy jest pusty, czy nie jest ustawiony? Ja właściwie to robi:

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

Czy !isset tylko sprawdza, czy $_SESSION[''] istnieć i nie sprawdzić, czy jest tam są wartości w tablicy lub nie

Odpowiedz

76

użyłbym isset i empty:

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

array_key_exists jest miłą alternatywą do korzystania isset do sprawdzania kluczy:

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

Marka na pewno dzwonisz pod numer session_start przed odczytaniem lub zapisaniem w tablicy sesji.

+5

nie trzeba używać isset, jeśli używasz już pustych. pusty sprawdzi także, czy zmienna istnieje, tzn. nie jest pusta/nieokreślona. – knittl

+0

Nie ma potrzeby używania isset ORAZ puste. –

+5

@knittl Dobrze jest upewnić się, że masz zmienną przed testowaniem, aby sprawdzić, czy jest pusta. – random

6

szukasz PHP empty() funkcji

+15

puste jest niebezpieczne, ponieważ zgłasza również wartość false, 0 i "0" jako puste. – OIS

5

Możesz użyć funkcji count(), aby zobaczyć, ile wpisów znajduje się w tablicy $ _SESSION. To nie jest dobra praktyka. Zamiast tego należy ustawić identyfikator użytkownika (lub coś podobnego), aby sprawdzić, czy sesja została zainicjowana, czy nie.

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

(Zakładając, że chcesz sprawdzić, czy ktoś jest zalogowany)

10

Użyj isset, empty lub array_key_exists (szczególnie dla kluczy tablic) przed uzyskaniem dostępu do zmiennej, której istnienia nie jesteś pewien. Tak zmienić kolejność w drugim przykładzie:

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

Jeśli chcesz sprawdzić, czy sesje są dostępne, prawdopodobnie chcesz użyć session_id() funkcję:

session_id() zwraca identyfikator sesji dla bieżącej sesji lub pusty ciąg (""), jeśli nie ma bieżącej sesji (nie istnieje bieżący identyfikator sesji).
-1

To nie jest zła praktyka. Ale może pojawi się błąd jak

indeksu nieokreślonej (klawisz zdefiniowano)

Więc najlepszym rozwiązaniem jest sprawdzenie, czy istnieje klucz tablicy przy użyciu wbudowanego array_key_exists funkcji.

Powiązane problemy