2012-04-10 10 views

Odpowiedz

35

isset jest zazwyczaj właściwy sposób, by sprawdzić, czy predefiniowane zmienne są aktualnie zdefiniowane:

Jeśli używasz wersji PHP przed 5,4,

zazwyczaj można uciec, a jego kuszący po prostu wykonaj poniższy kod, ale pamiętaj, że jeśli z jakiegoś powodu sesje zostaną wyłączone, funkcja session_start() będzie nadal wywoływana, co może prowadzić do błędów i niepotrzebnego debugowania, ponieważ tablica $ _SESSION nie może zostać utworzona.

if(!isset($_SESSION)){session_start();} 

jeśli chcesz uwzględnić sprawdzając, czy sesje są wyłączone z jakiegoś powodu, można wyciszyć się komunikat o błędzie, należy ustawić zmienną sesji testowej, a następnie zweryfikować to było ustawione. Jeśli nie, możesz zakodować w reakcji na wyłączone sesje. Będziesz chciał zrobić to wszystko na początku skryptu lub w jego pobliżu. Tak przykładem (działa różnie w zależności od ustawienia obsługi błędów):

if(!isset($_SESSION)){session_start();} 
$_SESSION['valid'] = 'valid'; 
if($_SESSION['valid'] != 'valid') 
{ 
    //handle disabled sessions 
} 

Jednakże, jeśli używasz PHP w wersji 5.4 lub nowszej,

Można użyć funkcji session_status(), lepszym rozwiązaniem jako uwzględnia wyłączone sesje i sprawdza, czy sesja już istnieje.

if (session_status() === PHP_SESSION_NONE){session_start();} 

UWAGA że PHP_SESSION_NONE jest stały zestaw PHP i dlatego nie muszą być zapakowane w cudzysłowach. Oblicza liczbę całkowitą 1, ale jako stałą, która została specjalnie ustawiona, aby wyeliminować potrzebę magicznych liczb, najlepiej przetestować względem stałej.

+0

dziękuję za wzięcie pod uwagę rozwiązania dla php <5,4 – Houston

+0

@nick dobrze, powiedziałbym, że znalazłeś błąd w wersji 5.4.16 lub bardziej prawdopodobne, że masz dziwną konfigurację php/server. Tak czy inaczej, dobrze jest załatwić swoje najgorsze przypadki: D – Rooster

7

Wiele osób po prostu używa @session_start(), aby wyłączyć ostrzeżenie, że sesja już się rozpoczęła. Alternatywą jest zwykle:

if (session_status() === PHP_SESSION_NONE) session_start(); 
1
if (session_id() === "") { session_start(); } 
3

spróbować tego warunku

if (version_compare(phpversion(), '5.4.0', '<')) { 
if(session_id() == '') { 
    session_start(); 
} }else{ 
if (session_status() == PHP_SESSION_NONE) { 
    session_start(); 
} } 

Jeśli tylko chcemy uniknąć błędu, użyj @ przed przykład funkcja :

@session_start(); 
+0

Witam, witam w SO. Czy mógłbyś edytować swój post, aby wyjaśnić, co robi twój kod i jak rozwiązuje problem PO? Odpowiedzi tylko na kod są odradzane i mogą zostać skasowane. –

0

Sprawdzenie dla istniejącej sesji przed rozpoczęciem nowej:

// # if phpversion() is >= 5.4 
    if(phpversion() >= 5.4) { 

    // # check session_status() function for value 'PHP_SESSION_NONE' 
    if(session_status() === PHP_SESSION_NONE) { 
     session_start(); 
    } 

    } else { // # maintain backwards compat. with PHP versions older than 5.4 

     // # if $_SESSION object if NOT set, start a new session! 
     if(!isset($_SESSION)) { 
     session_start(); 
     } 
    } 
Powiązane problemy