Comment créer des sessions persistantes en PHP?

J'ai utilisé session_start() pour lancer une session en PHP, mais quand mon navigateur se ferme, la session est allé.

Comment puis-je utiliser PHP pour créer des sessions persistantes qui durent à travers la fermeture du navigateur?

25
demandé sur hakre 2012-03-21 06:40:19

5 réponses

Voir la session php.ini Valeur .cookie_lifetime .

La valeur par défaut de 0 signifie mettre fin à la session lorsque le navigateur se ferme.

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 . En le définissant sur quelque chose de plus grand que 0, la session vivra pendant cette durée.

Par exemple

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

L'exemple ci-dessus provoque le cookie de session à définir avec un expiration de 7 jours à compter du début 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 que session_start() est appelé. La durée de vie du cookie est définie à partir du premier démarrage de la session, et non lors des requêtes 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 () .

Aussi Remarque: si votre session .gc_maxlifetime valeur 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 quand ils reviennent, le cookie de session n'est plus valide car les données sur le serveur ont été supprimées. Pour remédier à cela, vous devez également définir la durée de vie de ces données de session pour être au moins aussi longue 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();
53
répondu drew010 2012-03-21 02:57:55

Utiliser un cookie. Par exemple, ce tutoriel.

5
répondu ben author 2012-03-21 02:43:49

Les Sessions sont conçues de telle sorte qu'elles soient basées sur "Session". En d'autres termes, si vous fermez votre Navigateur (qui est essentiellement de votre session), il est supposé aller.

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. Ensuite, rappelez l'ID de session du cookie PHPSESSID (par défaut) et recherchez les données de session à partir de votre base de données.

2
répondu Rohit Chopra 2012-03-21 02:44:05

Je recommande d'utiliser des cookies et une base de données si vous voulez une session persistante. Nous stockons L'ID du client (valeur alphanumérique 32 bits aléatoire) dans un cookie, puis nous le référençons pour charger leurs informations client.

2
répondu Robert 2012-03-21 03:25:45

Vous pouvez démarrer votre session sans taper session_start() et vous pouvez le démarrer avec cookie comme ceci

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

Cela pourrait être fait parce que lorsque vous tapez session_start(), puis essayez de regarder le cookie comme ceci

print_r($_COOKIE);

Alors la sortie sera:

Array ( [PHPSESSID] => c0voj7h0b4aesddkc17a6jk7c3 )

Essayez-le vous-même

2
répondu MuhammadAfif 2017-07-13 08:04:53