2009-11-24 18 views
18

Tengo un script de terceros y me preguntaba cómo puedo consultar con PHP si se ha declarado session_start() antes de hacer algo.¿Cómo verifico si se ha ingresado session_start?

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

posible duplicado de [Prueba si la sesión se inició] (http://stackoverflow.com/questions/3357740/test-if-session-is-started) –

+9

Sí, pero esto fue preguntado hace 3 años. Esa pregunta fue hecha hace 2 años. –

+0

Consulte [Compruebe si la sesión PHP ya ha comenzado] (https://stackoverflow.com/q/6249707/6521116) –

Respuesta

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

supongo que se podría utilizar la función 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 tal vez probar si $_SESSION se ajusta o no, con isset, puede hacer el truco, ya que no se debe establecer cuando no se ha iniciado ninguna sesión, solo tiene que esperar que nada le asigne nada al $_SESSION sin iniciar primero la sesión.

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

Don no seas demasiado inteligente;). Prefiero 'return (session_id()! == "")'. – middus

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

El cheque le permitirá mantener su sesión actual activo incluso si es un bucle de nuevo la aplicación presentación donde va a volver a utilizar el formulario si los datos se escribe de forma incorrecta o tienen pesos y contrapesos adicionales dentro de su programa antes de pasar al siguiente programa.

+8

recomendaría usar 'if (session_id() == '')', ya que '$ _SESSION' se puede establecer mientras la sesión está cerrada. – Ragnagord

+0

Es cierto, pero todas las $ _SESSION ['variables'] se configuran como nulas cuando se inicia la sesión. Además, session_id() s son valores de cookies del lado del cliente. Depende del desarrollador cómo se utilizan los datos de la sesión. – Maarek

+0

@Maarek Cada vez que se invoca 'session_start()', las variables de sesión NO están todas configuradas en nulo. Y cuando se cierra una sesión (al salir de la secuencia de comandos o al llamar a 'session_write_close()') los datos de la sesión aún persisten. En tales casos, su cheque no es suficiente, porque no reiniciará una sesión cerrada. – Stefan

-1

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

Como en PHP> = 5.4.0, que tienen la función session_status() que le diga si han sido o no inicializar o si es discapacitado.

Por ejemplo, usted puede hacer:

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

Usted puede leer más sobre esto en http://www.php.net/manual/en/function.session-status.php

7

para PHP> = 5.4.0

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

para PHP 5.4.0 <

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

Este es el método recomendado. [http://www.php.net/manual/en/function.session-status.php](http://www.php.net/manual/en/function.session-status.php) –

+0

Tenga en cuenta que la <5.4.0 solución es bastante inútil. session_id() siempre devolverá una cadena vacía hasta que se llame a session_start(). Se llama todo el tiempo. –

0

Si sesión ya comenzó, de error: "Error fatal: no se puede utilizar el valor devuelto por una función en el contexto de escritura"

Prueba esto:

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

acabo de escribieron una función simple para ello.

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

¡la mejor manera trabaja para mí! if (session_status()! = 1) session_start();

Cuestiones relacionadas