variable - session_start php ejemplos




Compruebe si la sesión de PHP ya ha comenzado (17)

¿Es este fragmento de código de trabajo para usted?

if (!count($_SESSION)>0) {
    session_start();
}

Tengo un archivo PHP que a veces se llama desde una página que ha iniciado una sesión y, a veces, desde una página que no ha iniciado sesión. Por lo tanto, cuando tengo session_start() en este script, a veces recibo el mensaje de error para "la sesión ya iniciada". Para eso he puesto estas líneas:

if(!isset($_COOKIE["PHPSESSID"]))
{
  session_start();
}

pero esta vez recibí este mensaje de advertencia:

Aviso: Variable indefinida: _SESSION

¿Hay una mejor manera de comprobar si la sesión ya ha comenzado?

Si uso @session_start hará que las cosas funcionen correctamente y solo @session_start las advertencias?


Antes de PHP 5.4, no hay otra forma confiable de saber que no sea establecer una bandera global.

Considerar:

var_dump($_SESSION); // null
session_start();
var_dump($_SESSION); // array
session_destroy();
var_dump($_SESSION); // array, but session isn't active.

O:

session_id(); // returns empty string
session_start();
session_id(); // returns session hash
session_destroy();
session_id(); // returns empty string, ok, but then
session_id('foo'); // tell php the session id to use
session_id(); // returns 'foo', but no session is active.

Por lo tanto, antes de PHP 5.4 debe establecer un booleano global.


En PHP 5.3 esto funciona para mí:

if(!strlen(session_id())){
    session_name('someSpecialName');
    session_start();
} 

entonces tiene. Si no pone la instrucción "no at if" al comienzo de la sesión, se iniciará de alguna manera, no sé por qué.


Esto debería funcionar para todas las versiones de PHP. Determina la versión de PHP, luego verifica si la sesión se inicia según la versión de PHP. Luego, si no se inicia la sesión, se inicia.

function start_session() {
  if(version_compare(phpversion(), "5.4.0") != -1){
    if (session_status() == PHP_SESSION_NONE) {
      session_start();
    }
  } else {
    if(session_id() == '') {
      session_start();
    }
  }
}

Lo único que debes hacer es:

<?php
if(!isset($_SESSION))
{
session_start();
}
?>


No estoy seguro de la eficiencia de dicha solución, pero esto se debe a un proyecto en funcionamiento. También se usa si necesita definir el idioma predeterminado

   /**
    * Start session
    * Fall back to ukrainian language
    */
   function valid_session() {
    if(session_id()=='') {
        session_start();
        $_SESSION['lang']='uk';
        $_SESSION['lang_id']=3;
    }
    return true;
  }

PHP 5.4 introdujo http://www.php.net/manual/en/function.session-status.php , que es más confiable que confiar en session_id() .

Considere el siguiente fragmento de código:

session_id('test');
var_export(session_id() != ''); // true, but session is still not started!
var_export(session_status() == PHP_SESSION_ACTIVE); // false

Por lo tanto, para verificar si se inicia una sesión, la forma recomendada en PHP 5.4 es ahora:

session_status() == PHP_SESSION_ACTIVE

Puede usar la siguiente solución para verificar si una sesión de PHP ya ha comenzado:

if(session_id()== '')
{
   echo"Session isn't Start";
}
else
{
    echo"Session Started";
}

Puedes hacer esto, y es muy fácil.

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

Espero eso ayude :)


Respuesta BASADA en @Meliza Ramos Response (ver primera respuesta) y http://php.net/manual/en/function.phpversion.php ,

COMPORTAMIENTO:

  • define PHP_VERSION_ID si no existe
  • Definir la función para verificar la versión basada en PHP_VERSION_ID
  • Definir la función a openSession () segura.

solo usa openSession ()

    // PHP_VERSION_ID is available as of PHP 5.2.7, if our
    // version is lower than that, then emulate it
    if (!defined('PHP_VERSION_ID')) {
        $version = explode('.', PHP_VERSION);

        define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));


        // PHP_VERSION_ID is defined as a number, where the higher the number
        // is, the newer a PHP version is used. It's defined as used in the above
        // expression:
        //
        // $version_id = $major_version * 10000 + $minor_version * 100 + $release_version;
        //
        // Now with PHP_VERSION_ID we can check for features this PHP version
        // may have, this doesn't require to use version_compare() everytime
        // you check if the current PHP version may not support a feature.
        //
        // For example, we may here define the PHP_VERSION_* constants thats
        // not available in versions prior to 5.2.7

        if (PHP_VERSION_ID < 50207) {
            define('PHP_MAJOR_VERSION',   $version[0]);
            define('PHP_MINOR_VERSION',   $version[1]);
            define('PHP_RELEASE_VERSION', $version[2]);

            // and so on, ...
        }
    }

    function phpVersionAtLeast($strVersion = '0.0.0')
    {
        $version = explode('.', $strVersion);

        $questionVer = $version[0] * 10000 + $version[1] * 100 + $version[2];

        if(PHP_VERSION_ID >= $questionVer)
            return true;
        else
            return false;

    }

    function openSession()
    {
        if(phpVersionAtLeast('5.4.0'))
        {
            if(session_status()==PHP_SESSION_NONE)
                session_start();
        }
        else // under 5.4.0
        {
            if(session_id() == '')
                session_start();
        }
    }

Según mi práctica, antes de acceder a $_SESSION[] , debe llamar a session_start cada vez que use el script. Vea el siguiente enlace para el manual.

http://php.net/manual/en/function.session-start.php

Para mí al menos session_start es confuso como nombre. Una session_load puede ser más clara.


Use session_id() , devuelve una cadena vacía si no se establece. Es más confiable que consultar el $_COOKIE .

if (strlen(session_id()) < 1) {
    session_start();
}

http://php.net/manual/en/function.phpversion.php está disponible a partir de PHP 5.2.7, así que verifique esto primero y, si es necesario, http://php.net/manual/en/function.phpversion.php . session_status está disponible a partir de PHP 5.4, así que también tenemos que verificar esto:

if (!defined('PHP_VERSION_ID')) {
    $version = explode('.', PHP_VERSION);
    define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
}else{
    $version = PHP_VERSION_ID;
}
if($version < 50400){
    if(session_id() == '') {
        session_start();
    }
}else{
    if (session_status() !== PHP_SESSION_ACTIVE) {
        session_start();
    }
}

if (session_id() === "") { session_start(); }

Espero eso ayude !


if (version_compare(PHP_VERSION, "5.4.0") >= 0) {
    $sess = session_status();
    if ($sess == PHP_SESSION_NONE) {
        session_start();
    }
} else {
    if (!$_SESSION) {
        session_start();
    }
}

En realidad, ahora es demasiado tarde para explicarlo aquí de todos modos, ya que se ha resuelto. Este fue un archivo .inc de uno de mis proyectos donde configuras un menú para un restaurante al seleccionar un plato y eliminar / agregar o cambiar el orden. El servidor en el que estaba trabajando no tenía la versión real, así que la hice más flexible. Depende de los autores que quieran usarlo y probarlo.


session_start();
if(!empty($_SESSION['user']))
{     
  //code;
}
else
{
    header("location:index.php");
}




session-variables