php - sessioni - settare una variabile di sessione




Controlla se la sessione PHP è già iniziata (17)

Ho un file PHP che a volte viene chiamato da una pagina che ha avviato una sessione e talvolta da una pagina che non ha avviato la sessione. Quindi quando ho session_start() su questo script a volte ricevo il messaggio di errore per "sessione già avviata". Per questo ho messo queste righe:

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

ma questa volta ho ricevuto questo messaggio di avviso:

Avviso: variabile non definita: _SESSION

C'è un modo migliore per verificare se la sessione è già iniziata?

Se uso @session_start farà funzionare le cose correttamente e basta chiudere gli avvertimenti?


È possibile utilizzare la seguente soluzione per verificare se una sessione PHP è già stata avviata:

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

Dovresti riorganizzare il tuo codice in modo da chiamare session_start() esattamente una volta per pagina.



Non sono sicuro dell'efficienza di tale soluzione, ma questo è dal progetto di lavoro. Questo è anche usato se è necessario definire la lingua predefinita

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

Per tutte le versioni di PHP

if ((function_exists('session_status') 
  && session_status() !== PHP_SESSION_ACTIVE) || !session_id()) {
  session_start();
}

Prima di PHP 5.4 non esiste un modo affidabile per sapere se non impostare un flag globale.

Tenere conto:

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.

Quindi, prima di PHP 5.4 dovresti impostare un valore booleano globale.


Questo dovrebbe funzionare per tutte le versioni di PHP. Determina la versione di PHP, quindi controlla se la sessione è stata avviata in base alla versione di PHP. Quindi se la sessione non è avviata, viene avviata.

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();
    }
  }
}

Questo frammento di codice funziona per te?

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

Sostituisci session_start(); con:

if (!isset($a)) {
    a = False;
    if ($a == TRUE) {
        session_start();
        $a = TRUE;
    }
}

Su PHP 5.3 questo funziona per me:

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

allora tu hai. Se non si inserisce l'istruzione not if se inizia la sessione inizierà in qualsiasi modo non lo faccio perché.


Usa session_id() , restituisce una stringa vuota se non impostata. È più affidabile di controllare $_COOKIE .

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

Verificare questo :

<?php
/**
* @return bool
*/
function is_session_started()
{
    if ( php_sapi_name() !== 'cli' ) {
        if ( version_compare(phpversion(), '5.4.0', '>=') ) {
            return session_status() === PHP_SESSION_ACTIVE ? TRUE : FALSE;
        } else {
            return session_id() === '' ? FALSE : TRUE;
        }
    }
    return FALSE;
}

// Example
if ( is_session_started() === FALSE ) session_start();
?>

Fonte http://php.net


puoi farlo ed è davvero facile.

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

Spero che sia d'aiuto :)


http://php.net/manual/en/function.phpversion.php è disponibile a partire da PHP 5.2.7, quindi verifica prima questo e, se necessario, http://php.net/manual/en/function.phpversion.php . session_status è disponibile a partire da PHP 5.4, quindi dobbiamo controllare anche questo:

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(); }

spero che sia d'aiuto !


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

In realtà, ora è troppo tardi per spiegarlo qui come è stato risolto. Questo era un file .inc di uno dei miei progetti in cui si configura un menu per un ristorante selezionando un piatto e si rimuove / aggiunge o cambia l'ordine. Il server su cui stavo lavorando non aveva la versione attuale, quindi l'ho reso più flessibile. Spetta agli autori desiderare di usarlo e provarlo.


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




session-variables