2009-11-24 13 views
18

Ho uno script di terze parti e mi chiedevo come posso verificare con PHP se è stato dichiarato session_start() prima di fare qualcosa?Come posso verificare se session_start è stato inserito?

something like if(isset($_session_start())) { //do something } 
+1

possibile duplicato di [Verifica se la sessione è stata avviata] (http://stackoverflow.com/questions/3357740/test-if-session-is-started) –

+9

Sì, ma questo è stato chiesto 3 anni fa. Questa domanda è stata posta 2 anni fa. –

+0

Fare riferimento a [Verificare se la sessione PHP è già stata avviata] (https://stackoverflow.com/q/6249707/6521116) –

risposta

2
if(isset($_SESSION)) { 
    // do something 
} 
13

suppongo che si possa utilizzare la funzione session_id:

session_id() returns the session id for the current session or the empty string ("") if there is no current session (no current session id exists).

O forse verificando se $_SESSION è impostato o meno, con isset, potrebbe fare il trucco, in quanto non deve essere impostato quando nessuna sessione è stata avviata, devi solo sperare che nulla assegni nulla a $_SESSION senza avviare prima la sessione.

1
function session_started(){ return !!session_id(); } 
+3

Don essere troppo intelligente;). Preferirei 'return (session_id()! == "")'. – middus

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

Il controllo vi permetterà di mantenere la sessione corrente attiva, anche se si tratta di un loop back applicazione presentazione in cui si prevede di riutilizzare il modulo se i dati viene digitato in modo errato o avere pesi e contrappesi aggiuntivi all'interno del programma prima di procedere al prossimo programma.

+8

consiglierei di usare 'if (session_id() == '')', poiché '$ _SESSION' può essere impostato mentre la sessione è chiusa. – Ragnagord

+0

Vero, ma tutte $ _SESSION ['variabili'] sono impostate su null all'avvio della sessione. Inoltre, session_id() s sono valori del cookie sul lato client. Spetta allo sviluppatore come vengono utilizzati i dati di sessione. – Maarek

+0

@Maarek Ogni volta che viene chiamato 'session_start()', le variabili di sessione NON SONO tutte impostate su null. E quando una sessione viene chiusa (uscendo dallo script o chiamando 'session_write_close()') i dati della sessione persistono ancora. In questi casi il tuo controllo non è sufficiente, perché non riavvierà una sessione chiusa. – Stefan

-1

    if(defined('SID')) 
     // do 
25

Come in PHP> = 5.4.0, la funzionalità dei session_status() che vi dirà se sono stati inizializzare o no o se è disattivato.

Per esempio si può fare:

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

Si può leggere di più su di esso in http://www.php.net/manual/en/function.session-status.php

7

per php> = 5.4.0

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

per PHP 5.4.0 <

if(session_id() == '') { 
session_start(); 
} 
+1

Questo è il metodo consigliato. [http://www.php.net/manual/en/function.session-status.php](http://www.php.net/manual/en/function.session-status.php) –

+0

Si noti che il La <5.4.0 soluzione è praticamente inutile. session_id() restituirà sempre una stringa vuota fino a quando viene chiamato session_start(). Si chiama ogni volta. –

0

Se sessione già iniziato, errore: "Fatal error: Impossibile utilizzare il valore restituito funzione nel contesto di scrittura"

Prova questo:

$session = session_id(); 
if(empty($session)){ 
    session_start(); 
} 
0

ho appena scritto una semplice funzione per esso.

function isSessionStart() 
    { 
    if (version_compare(phpversion(), '5.4.0', '<')) { 
     if(session_id() == '') { 
     return false; 
     } 
     return true; 
    } 
    else { 
     if (session_status() == PHP_SESSION_NONE) { 
     return false; 
     } 
     return true; 
    } 
    } 
0

il modo migliore di lavorare per me! if (session_status()! = 1) session_start();

Problemi correlati