web-dev-qa-db-fra.com

Comment créer des sessions persistantes en PHP?

J'ai utilisé session_start() pour lancer une session en PHP, mais lorsque mon navigateur se ferme, la session a disparu.

Comment utiliser PHP pour créer des sessions persistantes qui durent à travers le navigateur se ferme?

28
John Hoffman

Voir la valeur php.inisession.cookie_lifetime .

La valeur par défaut de 0 Signifie mettre fin à la session à la fermeture du navigateur.

Vous pouvez remplacer cette valeur directement dans php.ini Ou la définir dans votre application avant de démarrer la session en utilisant ini_set . Si vous le définissez sur quelque chose de plus grand que 0, La session se poursuivra pendant cette durée.

Par exemple.

ini_set('session.cookie_lifetime', 60 * 60 * 24 * 7);  // 7 day cookie lifetime
session_start();

Dans l'exemple ci-dessus, le cookie de session est défini avec une expiration de 7 jours à compter du démarrage de la session.

Remarque: Si vous démarrez votre session pour toutes vos pages Web à partir du même morceau de code, cela ne prolongera pas l'expiration de la session à chaque fois session_start() est appelée. La durée de vie du cookie est définie à partir du premier démarrage de la session, et non lors des demandes suivantes. Si vous souhaitez prolonger la durée de vie d'une session de 7 jours à partir de l'heure actuelle, consultez également session_regenerate_id () .

Remarque également: Si votre valeur session.gc_maxlifetime est définie sur quelque chose de moins que la longueur du cookie de session, vous pouvez avoir une situation où l'utilisateur ne visite pas le site pendant 5 jours et à son retour, le cookie de session n'est plus valide car les données sur le serveur ont été supprimées. Pour y remédier, vous devez également définir la durée de vie de ces données de session au moins aussi longtemps que la durée de vie de votre cookie. Comme l'indique le manuel, il peut être nécessaire d'utiliser un session.save_path Personnalisé pour les données de session que vous souhaitez conserver plus longtemps que la valeur par défaut. Par conséquent, votre script peut ressembler à ceci:

ini_set('session.cookie_lifetime', 60 * 60 * 24 * 7);
ini_set('session.gc_maxlifetime', 60 * 60 * 24 * 7);
ini_set('session.save_path', '/home/yoursite/sessions');
session_start();
55
drew010

Je recommanderais d'utiliser des cookies et une base de données si vous souhaitez une session persistante. Nous stockons l'ID du client (valeur alph-anumérique aléatoire de 32 bits) dans un cookie, puis nous le référençons pour charger ses informations client.

2
Robert

Les sessions sont conçues de manière à être basées sur des "sessions". En d'autres termes, si vous fermez votre navigateur (qui est essentiellement votre session), il est supposé disparaître.

Vous pouvez essayer de stocker les données de session dans une base de données plutôt que dans un fichier. Stockez l'ID de session et les données de session dans une table. Rappelez ensuite l'ID de session du cookie PHPSESSID (par défaut) et recherchez les données de session de votre base de données.

2
Rohit Chopra

Vous pouvez démarrer votre session sans taper session_start() et vous pouvez la démarrer avec un cookie comme celui-ci

setcookie('PHPSESSID','any id' , any time);

cela pourrait être fait parce que lorsque vous tapez session_start() puis essayez de ressembler au cookie comme ceci

print_r($_COOKIE);

alors la sortie sera:

Array ( [PHPSESSID] => c0voj7h0b4aesddkc17a6jk7c3 )

essayez-le vous-même

2
MuhammadAfif