2009-11-24 12 views
18

J'ai un script tiers et je me demandais comment je peux vérifier avec PHP si session_start() a été déclaré avant de faire quelque chose?Comment vérifier si session_start a été entré?

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

duplication possible de [Test si la session est démarrée] (http://stackoverflow.com/questions/3357740/test-if-session-is-started) –

+9

Oui, mais cela a été demandé il y a 3 ans. Cette question a été posée il y a deux ans. –

+0

Reportez-vous à [Vérifiez si la session PHP a déjà commencé] (https://stackoverflow.com/q/6249707/6521116) –

Répondre

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

Je suppose que vous pouvez utiliser la fonction 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).

Ou tester peut-être si $_SESSION est réglé ou non, avec isset, pourrait faire l'affaire, car il ne doit pas être réglé Lorsqu'aucune session n'a été démarrée, il suffit d'espérer que rien n'attribue quoi que ce soit à $_SESSION sans démarrer la session en premier.

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

Don ne soyez pas trop intelligent;). Je préférerais 'return (session_id()! == "")'. – middus

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

Le chèque vous permettra de garder votre session active même si elle est une application de soumission boucle de retour où vous prévoyez de réutiliser le formulaire si les données sont tapé incorrectement ou avoir des contrôles supplémentaires et des soldes au sein de votre programme avant de passer au programme suivant.

+8

Je vous recommande d'utiliser 'if (session_id() == '')', puisque '$ _SESSION' peut être défini pendant la fermeture de la session. – Ragnagord

+0

True, mais tous les $ _SESSION ['variables'] sont définis sur null lorsque la session démarre. En outre, session_id() s sont des valeurs de cookie côté client. C'est au développeur de savoir comment les données de session sont utilisées. – Maarek

+0

@Maarek Chaque fois que 'session_start()' est appelée, les variables de session ne sont PAS toutes définies sur null. Et lorsqu'une session est fermée (en quittant le script ou en appelant 'session_write_close()'), les données de session persistent. Dans ce cas, votre vérification n'est pas suffisante, car elle ne redémarre pas une session fermée. – Stefan

-1

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

Comme en PHP> = 5.4.0, vous avez la fonction session_status() que vous dire si elle a été ou non initialize ou si elle est désactivée.

Par exemple, vous pouvez faire:

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

Vous pouvez en lire davantage dans http://www.php.net/manual/en/function.session-status.php

7

pour php> = 5.4.0

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

pour php 5.4.0 <

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

C'est la méthode recommandée. [http://www.php.net/manual/fr/function.session-status.php](http://www.php.net/manual/fr/function.session-status.php) –

+0

Notez que le <5.4.0 solution est à peu près inutile. session_id() retournera toujours une chaîne vide jusqu'à ce que session_start() soit appelée. Ça s'appelle à chaque fois. –

0

Si la session a déjà commencé, erreur: « Erreur fatale: Impossible d'utiliser la valeur de retour de la fonction dans le contexte d'écriture »

Essayez ceci:

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

Je viens d'écrire une fonction simple pour elle.

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

meilleure façon de travailler pour moi! if (session_status()! = 1) session_start();

Questions connexes