web-dev-qa-db-fra.com

Qu'est-ce qui maintient une session php en vie?

Les sessions ne sont-elles conservées que chaque fois que vous accédez à une page avec session_start(); ou est-ce que d'autres pages la conservent également?

Exemple (avec 30 minutes timeout):

1

l'utilisateur accède à la page avec session_start ();
25 minutes plus tard, ils accèdent à une autre session_start ();
page session reste en vie

2

l'utilisateur accède à la page avec session_start ();
25 minutes plus tard, ils accèdent à un non-session_start (); page
session reste en vie

Est-ce que 2 est également vrai?

34
Shaun

Votre navigateur contient toujours un cookie de session lorsque vous accédez à une page comportant session_start(). Le nom du cookie sera PHPSESSID si le site Web utilise PHP (bien que le nom puisse être modifié). Ce cookie de session contient un identifiant de session qui aide le navigateur à maintenir cette session avec le serveur.

Vous pouvez vérifier manuellement en naviguant sur n'importe quel site Web ayant votre session, puis supprimer les cookies de votre navigateur, votre session sera perdue.

Dans votre cas, les 1 et 2 sont corrects.

2 est correct car l'utilisateur a déjà accédé à une page comportant session_start() et votre identifiant de session sera défini pour les 30 prochaines minutes et sera présent même si vous accédez à une page sans session.

NOTE: Mais la page que vous visiterez si contient session_destroy(), votre session sera détruite.

17
Abhinav

L'appel de session_start () donne simplement à votre code un accès à la session.

Ce qui maintient la session en vie, c’est l’envoi par votre navigateur de l’identifiant de session (stocké dans un cookie) au serveur, que vous l’utilisiez ou non.

Réponse: Ils sont vrais tous les deux.

12
Fabien Warniez

Voici la partie pertinente de la documentation

Lorsqu'un visiteur accède à votre site, PHP vérifie automatiquement (si session.auto_start est défini sur 1) ou sur votre demande (explicitement par session_start ()) si un identifiant de session spécifique a été envoyé avec la demande. Si tel est le cas, l'environnement sauvegardé antérieur est recréé

http://www.php.net/manual/en/intro.session.php

session_start () crée une session ou reprend la session actuelle en fonction d'un identifiant de session transmis via une requête GET ou POST, ou transmis via un cookie.

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

Cela signifie que si vous n'appelez pas session_start, la session ne sera pas reprise et l'expiration ne sera pas prolongée.

5
Prinzhorn

Session_start () est un mécanisme interne permettant à php d’accéder à la session et d’envoyer un cookie de session au navigateur client.

  1. Le cas 1 est vrai: parce que l'utilisateur a accédé à une page avec session_start (), puis à une autre page similaire.
  2. Le cas 2 n'est vrai que si le délai d'attente de la session est supérieur à 25 minutes entre deux visites.

Dans le cas 2, le serveur n'enverra aucun cookie de session, c'est un navigateur qui inclut un cookie dans l'en-tête de la requête.

2
dlyaza

Dans le cas présent, la PHP durée de session de 30 minutes est en quelque sorte un facteur "question piège". La durée de la session par défaut et quasi universelle est de 1440 secondes, ou 24 minutes. Donc, pour la plupart des gens, les données de la session auraient pu disparaître avant les 25 minutes.

Cet article explique en détail le fonctionnement de PHP sessions. http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/A_11909-PHP- Sessions-plus simples que vous-mai-Think.html

2
Ray Paseur

Il n’a rien à faire avec les pages Web, les sessions interagissent avec votre navigateur par identifiant de session.

Les identifiants de session générés par PHP sont uniques, aléatoires et presque impossibles à deviner, rendant très difficile l'accès Par un attaquant aux données de la session ou à leur modification. De plus, étant donné que les données de la session sont stockées sur le serveur , Il n’est pas nécessaire de les envoyer avec chaque demande du navigateur.

Pour démarrer une session PHP dans votre script, appelez simplement la fonction session _ Start (). S'il s'agit d'une nouvelle session, cette fonction génère un SID unique pour la session et l'envoie au navigateur sous la forme d'un cookie appelé PHPSESSID (par défaut). Toutefois, si le navigateur a envoyé un PHPSESSID cookie sur le serveur car une session existe déjà, session_start () utilise cette session existante: session_start ();

1
sunny

La 1ère instruction est vraie, sauf si vous utilisez un nom de session différent sur les deux pages.

La 2ème déclaration est fausse.

0
Shimon Rachlenko