web-dev-qa-db-fra.com

Comment pouvez-vous vérifier si un PHP session existe?

Je me demandais simplement comment vérifier si une session PHP existait ... Ma compréhension est que quoi qu'il arrive, si j'utilise des sessions, je dois démarrer mes fichiers avec session_start () pour accéder même à la session, même si sais que cela existe déjà.

J'ai lu à l'utilisateur session_id () pour savoir si une session existe, mais comme je dois utiliser session_start () avant d'appeler session_id (), et session_start () créera un nouvel ID s'il n'y a pas de session, comment puis-je vérifier si une session existe?

10
ARW

Dans PHP versions antérieures à 5.4, vous pouvez simplement utiliser la fonction session_id() :

$has_session = session_id() !== '';

Dans PHP version 5.4+, vous pouvez utiliser session_status() :

$has_session = session_status() == PHP_SESSION_ACTIVE;
23
xenak
isset($_SESSION)

Cela devrait être ça. Si vous voulez vérifier si une seule variable de session existe, utilisez if(isset($_SESSION['variablename'])).

16
Simon Carlson

Dans PHP, il existe quelque chose appelé le nom de session. Le nom est associé au cookie qui sera défini si la session a déjà été démarrée.

Ainsi, vous pouvez vérifier le tableau $_COOKIE si un cookie de session est disponible. Les cookies sont normalement la forme préférée pour échanger l'identifiant de session pour le nom de session avec le navigateur.

Si un cookie existe déjà, cela signifie qu'une session PHP a été démarrée plus tôt. Sinon, session_start() créera un nouvel identifiant de session et une nouvelle session.

Une deuxième façon de vérifier cela consiste à vérifier les en-têtes sortants si le cookie de la session est défini ici. Ce sera réglé s'il s'agit d'une nouvelle session. Ou si l'identifiant de session a changé.

7
hakre

Je trouve qu'il est préférable plusieurs fois (dépend de la nature de l'application) de simplement tester pour voir si un cookie de session est défini dans le client:

<?php

if (isset($_COOKIE["PHPSESSID"])) {
    echo "active";
} else {
    echo "don't see one";
}

?>

Bien sûr, remplacez le nom de session par défaut "PHPSESSID" par celui que vous utilisez.

5
Steve Piper

isset ($ _SESSION) n'est pas suffisant, car si une session a été créée et détruite (avec session_destroy()) dans la même exécution, isset ($ _SESSION) retournera vrai . Et cette situation peut se produire sans que vous le sachiez lorsqu'un code tiers est utilisé. session_id() renvoie correctement une chaîne vide et peut être appelé avant session_start().

3
Roman

Stockez le session_id dans $_SESSION et vérifiez-le.

Première fois

session_start();
$_SESSION['id'] = session_id();

Démarre une session et stocke l'identifiant de session donné aléatoirement.

La prochaine fois

session_start();
$valid_session = isset($_SESSION['id']) ? $_SESSION['id'] === session_id() : FALSE;
if (!$valid_session) {
   header('Location: login.php');
   exit();
}

Démarre une session, vérifie si l'identifiant de session actuel et l'identifiant de session stocké sont identiques (avec le nom ternaire? En remplacement du court-circuit inexistant AND en php) Sinon, demande à nouveau de se connecter.

0
Trilarion

Vérifier si la session existe avant d'appeler session_start ()

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

Vous pouvez appeler session_id avant session_start. http://www.php.net/manual/en/function.session-id.php - lire le paramètre id

0
craig1231

J'ai toujours simplement utilisé

if (@session_id() == "") @session_start();

M'a pas encore échoué.

Cela fait assez longtemps que je l'utilise.

NOTE: @ supprime simplement les avertissements.

0
SpYk3HH