IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Cookies] Sessions confusent


Sujet :

Langage PHP

  1. #1
    Membre du Club Avatar de AzertyH
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Points : 67
    Points
    67
    Par défaut [Cookies] Sessions confusent
    Bonjour,

    Cela fait environ 2 mois que je m'occuppe à apprendre le développement en php, et les autres langages (html,...). Seulement, je n'arive pas à bien comprendre le fonctionnement des sessions malgrès les tutos que j'ai pu lire. En fait, j'ai l'impression que beaucoup expliquent avec leur propre vocabulaire, qui diffère selon les personnes. Cela implique donc des mauvaises interpretation de ma part, car les mots sont parfois transformés, et donc les explications me deviennent confuses.

    Pouvez vous m'aider à comprendre le processus des sessions s'il vous plai.

    Je vais quand même vous exposer ce que j'ai compris et ce que je comprend pas, dans le processus d'une session:

    1) Avec l'instruction session_start on créait une nouvelle session.

    2) Si l'on ferme le navigateur, alors beaucoup disent que la session en cours est détruite, mais je pense que c'est une erreur car la session n'est pas détruite : elle est simplement fermée. En effet, le fichier session est toujours présent sur le serveur. Cette erreur est trop fréquente et peut induire facilement en erreur, surtout pour des débutants!

    3) Nombreux disent qu'il suffit de réouvrir le navigateur et que si l'on refait session_start alors la session de tout à l'heure est récupéré (enfin c'est ce que j'ai compris). Et bien moi non, quand je réouvre mon navigateur et si ma page fait un session_start, alors un autre fichier de session est créé sur mon serveur, mais en aucun cas la session de tout à l'heure est restaurée.

    4) Je vous pose alors cette question: Comment faire pour récupérer la session d'avant fermeture du navigateur, pour la restaurer si le même utilisateur ferme puis reouvre son navigateur. Ainsi, cela lui permettrait de ne pas se reloguer à chaque fois.

    Pour info, j'utilise Internet explorer. Je compte utiliser les cookies coté client afin d'y stocker le numéro de session.

    Pouvez vous me donner le code exact à mettre avec session_start pour récupérer la session d'un même utilisateur après réouverture du navigateur? D'autre part, pouvez-vous me donner le code de création du cookies afin d'y placer le numéro de session?


    Merci beaucoup pour votre aide, cordialement

  2. #2
    Membre éclairé
    Avatar de jc_cornic
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    623
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 623
    Points : 823
    Points
    823
    Par défaut
    Salut, tu as essayé avec session_id() ??

    Normalement, ca te renvoie l'id de ta session (id unique). Tu le stocke dans une bdd client et si il ferme l'exploreur, il peut le rouvrir avec un

    session_id($oldID);

    http://www.php.net/session_id

    ++
    JC

  3. #3
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Citation Envoyé par AzertyH
    2) Si l'on ferme le navigateur, alors beaucoup disent que la session en cours est détruite, mais je pense que c'est une erreur car la session n'est pas détruite : elle est simplement fermée. En effet, le fichier session est toujours présent sur le serveur. Cette erreur est trop fréquente et peut induire facilement en erreur, surtout pour des débutants!

    3) Nombreux disent qu'il suffit de réouvrir le navigateur et que si l'on refait session_start alors la session de tout à l'heure est récupéré (enfin c'est ce que j'ai compris). Et bien moi non, quand je réouvre mon navigateur et si ma page fait un session_start, alors un autre fichier de session est créé sur mon serveur, mais en aucun cas la session de tout à l'heure est restaurée.
    Tu trouves pas qu'il y a une incompatibilité dans ces deux points ?
    Tu n'es pas d'accord avec le fait que si on ferme le navigateur la session est détruite et pourtant tes expériences prouvent le contraire
    Ce n'est pas parce qu'il y a un fichier de session sur le serveur que la session correspondante est valide !
    4) Je vous pose alors cette question: Comment faire pour récupérer la session d'avant fermeture du navigateur, pour la restaurer si le même utilisateur ferme puis reouvre son navigateur. Ainsi, cela lui permettrait de ne pas se reloguer à chaque fois.
    Vois avec les cookies qui persistent normalement à la fermeture du navigateur.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par AzertyH
    Bonjour,

    1) Avec l'instruction session_start on créait une nouvelle session.

    Avec session_start() on crée une nouvelle session (ou on rappelle une session existante)...

    Citation Envoyé par AzertyH
    2) Si l'on ferme le navigateur, alors beaucoup disent que la session en cours est détruite, mais je pense que c'est une erreur car la session n'est pas détruite : elle est simplement fermée. En effet, le fichier session est toujours présent sur le serveur. Cette erreur est trop fréquente et peut induire facilement en erreur, surtout pour des débutants!
    Le système de session PHP se décompose en deux parties distinctes :
    • Le fichier ou la table contenant les informations de sessions (enregistrées coté serveur).
    • Et l'identifiant de session, qui est stocké chez le client dans un cookie ou directement dans l'URL courant. Cet identifiant... identifie le fichier de session sur le serveur (ou l'enregistrement dans la base de données).
    Citation Envoyé par AzertyH
    3) Nombreux disent qu'il suffit de réouvrir le navigateur et que si l'on refait session_start alors la session de tout à l'heure est récupéré (enfin c'est ce que j'ai compris). Et bien moi non, quand je réouvre mon navigateur et si ma page fait un session_start, alors un autre fichier de session est créé sur mon serveur, mais en aucun cas la session de tout à l'heure est restaurée.
    • Lorsque le navigateur est fermé, c'est l'identifiant de session qui est détruit (le cookie enregistré chez le client), le fichier de session existe toujours sur le serveur (qui n'a pas moyen de savoir si le client a fermé son navigateur).
    Citation Envoyé par AzertyH
    4) Je vous pose alors cette question: Comment faire pour récupérer la session d'avant fermeture du navigateur, pour la restaurer si le même utilisateur ferme puis reouvre son navigateur. Ainsi, cela lui permettrait de ne pas se reloguer à chaque fois.
    • Il suffit que le cookie contenant l'identifiant de session soit conservé chez le client, et que le fichier de session présent sur le serveur soit toujours valide.
    Citation Envoyé par AzertyH
    Pouvez vous me donner le code exact à mettre avec session_start pour récupérer la session d'un même utilisateur après réouverture du navigateur? D'autre part, pouvez-vous me donner le code de création du cookies afin d'y placer le numéro de session?


    Merci beaucoup pour votre aide, cordialement
    Bye

  5. #5
    Membre du Club Avatar de AzertyH
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Points : 67
    Points
    67
    Par défaut
    Houla c'est dure...
    Merci pour vos réponse mais je crain que j'en suis toujours au même point!

    Je vais évoquer chaqu'une de vos réponses et je vais vous dire ce que je pige pas.

    Salut, tu as essayé avec session_id() ??

    Normalement, ca te renvoie l'id de ta session (id unique). Tu le stocke dans une bdd client et si il ferme l'exploreur, il peut le rouvrir avec un

    session_id($oldID);
    Tu dis qu'on peut réouvrir une session qui a déjà étée créée (sur le serveur) avec session_id($oldID); Mais (après une revérification de cette fonction sur le manuel php), cette fonction sert récupérer ou à changer le numéro de la session courante, mais en aucun cas à restaurer une session existante sur le serveur et dont l'utilisateur aurait fermé puis réouvert son navigateur.

    Tu n'es pas d'accord avec le fait que si on ferme le navigateur la session est détruite et pourtant tes expériences prouvent le contraire
    Mes expériences ne me prouve pas le contraire car le fichier contenu dans le répertoire /tmp (par défaut), dont le nom comporte le numéro de session de l'utilisateur est toujours présent. On appele cela une fermeture de session et non la destruction. Dans le cas de la destruction on utilise session_destroy. Mais je peux me tomper (a vous de me rectifier).

    Ce n'est pas parce qu'il y a un fichier de session sur le serveur que la session correspondante est valide !
    Tu veux peut être dire que si la session en question est périmée, c'est à dire que si elle a atteint la durée maxi de sa validité (session_life_time dans php.ini ou un truck dans le genre) alors elle n'est plus valide. Dans le cas ou elle n'est plus valide, je suis d'accord que le fichier session en question existe toujours sur le serveur (du moment qu'on a pas fait de session_destroy). Mais ce n'est pas la mon problème. Mon problème, c'est commant restaurer une session après que celle-ci soit fermée?
    Citation:
    4) Je vous pose alors cette question: Comment faire pour récupérer la session d'avant fermeture du navigateur, pour la restaurer si le même utilisateur ferme puis reouvre son navigateur. Ainsi, cela lui permettrait de ne pas se reloguer à chaque fois.

    Vois avec les cookies qui persistent normalement à la fermeture du navigateur
    J'avais compris qu'il fallait utiliser un cookie pour enregistrer le numéro de session de l'utilisateur. Mais moi ce qui me fait galèrer c'est avac quelle instruction on peut réouvrir une session avec son numéro de session?
    Avec session_start() on crée une nouvelle session (ou on rappelle une session existante)...
    No problème

    Le système de session PHP se décompose en deux parties distinctes :

    Le fichier ou la table contenant les informations de sessions (enregistrées coté serveur).
    No problème

    Et l'identifiant de session, qui est stocké chez le client dans un cookie ou directement dans l'URL courant. Cet identifiant... identifie le fichier de session sur le serveur (ou l'enregistrement dans la base de données).
    Je saurait me débrouiller pour lire l'identifiant de session de l'utilisateur à l'endroit de son propre cookie. Par contre, comme je ne sesse de vous le demander : Comment peut-on réouvrir un fichier de session avec son numéro contenu dans le cookie?
    Lorsque le navigateur est fermé, c'est l'identifiant de session qui est détruit (le cookie enregistré chez le client), le fichier de session existe toujours sur le serveur (qui n'a pas moyen de savoir si le client a fermé son navigateur).
    No problème

    FAQ Session PHP
    J'ai souvent été faire un tour! J'ai peut être raté quelque chose?

    Merci pour votre aide

  6. #6
    Invité
    Invité(e)
    Par défaut
    Comment restaurer une session après qu'elle soit fermée ?

    Ce n'est pas la session qui est fermée, mais l'identifiant qui est détruit chez le client (repeat after me... ) .

    Donc il te suffit de créer un cookie, et de spécifier sa date d'expiration.

    Tu peux aussi paramétrer session_cache_expire(). Au besoin.

    Il existe d'autres façons de procéder ... Mais celle-ci me parait la plus élémentaire, la plus logique...

    ...Et puis perso, la persistance de session, c'est un truc que je n'introduirais jamais "de moi-même" dans une application PHP...Enfin "J'me comprends".

  7. #7
    Membre du Club Avatar de AzertyH
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Points : 67
    Points
    67
    Par défaut
    Pour créer un cookie avec sa date d'expiration, je sais faire :

    setcookie("cookietest","Bonjour monde",time()+30);

    Pour ça y a pas de problème



    Je vais vous montrer comment j'imagine le processus:

    1) Créer un cookie
    2) enregistrer le numéro de la session en cours dans ce cookie

    -----> Entre temps l'utilisateur ferme puis reouvre sont navigateur

    3) Je récupère le numéro de session que j'ai enregistré tout à l'heure dans le cookie
    4) Je réouvre la session grace à ce numéro : Mais comment réouvrir une session avec son numéro?????????????

    5) Ensuite quand le cookie expire alors le numéro de la session contenu dans ce cookie disparait (logique car le cookie est détruit) et donc lors de la reouverture du navigateur le programme ne peut plus acceder à ce numéro de session. Le programme ne peut donc plus réouvrir la session.

    Ou alors ce n'est pas comme ça qui faut s'y prendre! Enfin je vous pose la question?

    Merci pour votre aide

  8. #8
    Membre du Club Avatar de AzertyH
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Points : 67
    Points
    67
    Par défaut
    Ou alors j'ai une autre solution mais je pense qu'elle peut être plus automatisée et donc moins manipulable.

    Avec l'instruction : session_set_cookie_params(); un cookie est automatiquement créé avec sa date d'expiration. Quand ce cookies se détruit, alors la session est perdue.

    C'est une solution mais je voudrais savoir si elle est bonne? En tout cas je me pencherais plutot vers la solution de mon message precedant. Mais bon si ça se trouve elle est impossible? Enfin pouvez_vous m'aider s'il vous plait?

    Merci

  9. #9
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449

  10. #10
    Membre du Club Avatar de AzertyH
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Points : 67
    Points
    67
    Par défaut
    UN GRAND MERCI Mr N.

    Grace à toi ma situation est débloquée. Je suis enfin soulagé. Je viens de tester ceci (dans le php.ini) :

    session.cookie_lifetime = 30

    Arrivé à 30 secondes, le cookie se détruit et donc la session n'est plus valide.

    Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Cookies] Sessions qui disparaissent
    Par schnito dans le forum Langage
    Réponses: 31
    Dernier message: 22/12/2006, 11h15
  2. [Cookies] Session et sous-domaines
    Par davmaster62 dans le forum Langage
    Réponses: 14
    Dernier message: 23/03/2006, 09h12
  3. Réponses: 12
    Dernier message: 14/02/2006, 19h03
  4. [Cookies] Session object destruction failed
    Par Paganoni dans le forum Langage
    Réponses: 2
    Dernier message: 11/01/2006, 09h38
  5. Réponses: 12
    Dernier message: 24/09/2003, 15h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo