Gestion + durée des sessions en PHP

Résolu/Fermé
Coutcout86
Messages postés
195
Date d'inscription
lundi 23 novembre 2009
Statut
Membre
Dernière intervention
26 mai 2016
- 18 févr. 2015 à 09:33
totodunet
Messages postés
1377
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
5 mars 2020
- 18 févr. 2015 à 14:05
Bonjour,

Je suis en train de développer une application en PHP et j'utilise les sessions.
Pour comprendre un peu mon application j'ai un système d'authentification avec un login et un mot de passe.

Lorsque l'utilisateur est connecté une session est créée.
Or je n'ai pas touché à la durée des sessions et au bout d'un certain moment (valeur par défaut du PHP.ini je suppose) je perds ma session et donc mon utilisateur.

Alors ne sachant pas trop comment m'y prendre concernant la gestion des sessions je souhaite avoir de l'aide

Ce que j'aimerais c'est tester si la session est expirée ou non et si elle est expirée on retourne à la page d'authentification (ou on se déconnecte).

Alors j'ai bien pensé au session_destroy mais je ne sais pas si c'est la meilleure solution.

Pourriez-vous m'aider à résoudre cette problématique ?

Merci d'avance.

2 réponses

lolerki
Messages postés
606
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
1 mars 2017
101
Modifié par lolerki le 18/02/2015 à 09:56
Bonjour,

Je ne comprends pas trop ton problème, mais si tu veux te déconnecter session_destroy est OBLIGATOIRE pour toutes déconnexion d'un utilisateur.
En ce qui concerne la durée je te conseil de crée un cookie avec une durée déterminé, comme cela il expire au bout d'un temps donnée. N'oublie pas de le détruire (avec un temps inférieur au cookie crée) lors du session_destroy

PS : J'ai eu un problème avec les cookie je te donne mon sujet (résolu) cela te permettra de voir comment détruire une session.
https://forums.commentcamarche.net/forum/affich-31184976-detruire-une-session
0
Coutcout86
Messages postés
195
Date d'inscription
lundi 23 novembre 2009
Statut
Membre
Dernière intervention
26 mai 2016

18 févr. 2015 à 10:43
En fait ce que je souhaite faire c'est d'être déconnecté automatiquement de l'applications lorsque la session n'existe plus.

Je fais des insertions dans une base de données avec le nom de l'utilisateur connecté or quand la session n'existe plus je n'ai plus d'utilisateur donc ça pose problème. Ensuite je donne accés à des fonctionnalités selon le rôle de l'utilisateur or lorsque la session n'existe plus le rôle n'existe plus non plus et la fonctionnalité n'est plus présente.

Est-ce que tu comprends mieux ma problématique?
0
lolerki
Messages postés
606
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
1 mars 2017
101 > Coutcout86
Messages postés
195
Date d'inscription
lundi 23 novembre 2009
Statut
Membre
Dernière intervention
26 mai 2016

Modifié par lolerki le 18/02/2015 à 10:47
Je te confirme que pour cela il faut détruire la session est donc session_destroy. Mais détruire une session quand l'utilisateur quitte je ne sais pas si c'est possible. Car on doit exécuter un script sur serveur or il a quitter.

PS : pourquoi mettre un utilisateur connecter dans la bdd ?
0
Coutcout86
Messages postés
195
Date d'inscription
lundi 23 novembre 2009
Statut
Membre
Dernière intervention
26 mai 2016

18 févr. 2015 à 10:53
Pour avoir des logs précis sur qui à fait quoi et quel actions il a fait
0
totodunet
Messages postés
1377
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
5 mars 2020
196
18 févr. 2015 à 10:49
Salut

Pour savoir si la session existe toujours, tu peux faire un isset($_SESSION) mais cela m'étonne quand même qu'elle expire comme ça. Par défaut elles sont toujours actifs tant que l'utilisateur est connecté et a le navigateur ouvert. Fais-tu bien session_start() à chaque début de page PHP ?
Tu peux regarder dans php.ini si session.cookie_lifetime est initialisé par défaut à 0. Cela veut dire que le client gardera le cookie de session jusqu'à la fermeture du navigateur ou à sa déconnexion.
Normalement il n'y a pas besoin de créer des cookies pour gérer les sessions (sauf dans certains cas comme pour être reconnecté automatiquement pendant plusieurs jours) car c'est ce que fait déjà le mécanisme de session en PHP si elle n'est pas transmise par URL. Pour modifier la durée du cookie de session, faut utiliser session_set_cookie_params() et mettre en paramètre le temps en minutes de la durée de vie du cookie de session.

session_set_cookie_params(0) => meurt à la déconnexion ou à la fermeture du navigateur seulement
session_set_cookie_params(120) => meurt au bout de 2 heures et pas avant (même si on ferme le navigateur et qu'on le rouvre avant l'heure d'expiration, il sera toujours là et tu seras connecté) sauf si bien sûr on se déconnecte

Le session_destroy() va détruire ta session dans tout les cas, côté serveur et côté client.
0
Coutcout86
Messages postés
195
Date d'inscription
lundi 23 novembre 2009
Statut
Membre
Dernière intervention
26 mai 2016

18 févr. 2015 à 10:54
Bonne question pour le session_start et effectivement je ne l'est pas fait à toute les pages PHP.

Faut-il le faire pour chaque page PHP ?
0
lolerki
Messages postés
606
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
1 mars 2017
101 > Coutcout86
Messages postés
195
Date d'inscription
lundi 23 novembre 2009
Statut
Membre
Dernière intervention
26 mai 2016

18 févr. 2015 à 10:58
Oui chaque page php ou tu en n'a besoin
0
Coutcout86
Messages postés
195
Date d'inscription
lundi 23 novembre 2009
Statut
Membre
Dernière intervention
26 mai 2016

18 févr. 2015 à 11:07
Je suis peut être bête mais pourquoi alors sur certaines pages PHP (ou je n'ai pas de session_start()) je récupère quand les informations de mon utilisateur connecté ?
0
lolerki
Messages postés
606
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
1 mars 2017
101
18 févr. 2015 à 11:24
Tu utilise bien la variable super globale session ? Sinon cela veux dire que tu as un sessions_start() dans un include
0
Coutcout86
Messages postés
195
Date d'inscription
lundi 23 novembre 2009
Statut
Membre
Dernière intervention
26 mai 2016

18 févr. 2015 à 11:39
Oui j'utilise la super globale session pourquoi ? Je viens d'ajouter un session_start sur chacune de mes pages PHP.

Autre question du coup : Pour le session_set_cookie_params(0) il faut aussi le mettre sur toutes les pages PHP ?
0