Gestion + durée des sessions en PHP

Résolu
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

  1. 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
    1. 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
    2. @Coutcout86Oui chaque page php ou tu en n'a besoin
      0
    3. 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
    4. Tu utilise bien la variable super globale session ? Sinon cela veux dire que tu as un sessions_start() dans un include
      0
    5. 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