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?
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;
isset($_SESSION)
Cela devrait être ça. Si vous voulez vérifier si une seule variable de session existe, utilisez if(isset($_SESSION['variablename']))
.
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é.
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.
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()
.
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.
Vérifier si la session existe avant d'appeler session_start ()
if(!isset($_SESSION))session_start();
Vous pouvez appeler session_id avant session_start. http://www.php.net/manual/en/function.session-id.php - lire le paramètre id
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.