Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/11/2006, 16h15   #1
Nouveau Membre du Club
 
Avatar de AzertyH
 
Inscription : mars 2006
Messages : 90
Détails du profil
Informations personnelles :
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mars 2006
Messages : 90
Points : 35
Points : 35
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
AzertyH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2006, 17h37   #2
Membre expérimenté
 
Avatar de jc_cornic
 
Inscription : octobre 2006
Messages : 624
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : octobre 2006
Messages : 624
Points : 588
Points : 588
Envoyer un message via MSN à jc_cornic
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
jc_cornic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2006, 17h43   #3
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
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 !
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.
__________________
Get your motor runnin'
Head out on the highway...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2006, 18h37   #4
Rédacteur
 
Homme Jean-Pierre
Inscription : août 2005
Messages : 333
Détails du profil
Informations personnelles :
Nom : Homme Jean-Pierre
Âge : 26
Localisation : Suisse

Informations forums :
Inscription : août 2005
Messages : 333
Points : 442
Points : 442
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
Guardian_7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2006, 22h04   #5
Nouveau Membre du Club
 
Avatar de AzertyH
 
Inscription : mars 2006
Messages : 90
Détails du profil
Informations personnelles :
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mars 2006
Messages : 90
Points : 35
Points : 35
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.

Citation:
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.

Citation:
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).

Citation:
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:
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.

Citation:
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?
Citation:
Avec session_start() on crée une nouvelle session (ou on rappelle une session existante)...
No problème

Citation:
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

Citation:
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?
Citation:
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

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

Merci pour votre aide
AzertyH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2006, 23h25   #6
Rédacteur
 
Homme Jean-Pierre
Inscription : août 2005
Messages : 333
Détails du profil
Informations personnelles :
Nom : Homme Jean-Pierre
Âge : 26
Localisation : Suisse

Informations forums :
Inscription : août 2005
Messages : 333
Points : 442
Points : 442
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".
Guardian_7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2006, 05h42   #7
Nouveau Membre du Club
 
Avatar de AzertyH
 
Inscription : mars 2006
Messages : 90
Détails du profil
Informations personnelles :
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mars 2006
Messages : 90
Points : 35
Points : 35
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
AzertyH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2006, 08h25   #8
Nouveau Membre du Club
 
Avatar de AzertyH
 
Inscription : mars 2006
Messages : 90
Détails du profil
Informations personnelles :
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mars 2006
Messages : 90
Points : 35
Points : 35
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
AzertyH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2006, 16h22   #9
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
http://php.developpez.com/faq/?page=...sions_dureevie
__________________
Get your motor runnin'
Head out on the highway...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2006, 16h59   #10
Nouveau Membre du Club
 
Avatar de AzertyH
 
Inscription : mars 2006
Messages : 90
Détails du profil
Informations personnelles :
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mars 2006
Messages : 90
Points : 35
Points : 35
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
AzertyH est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h45.


 
 
 
 
Partenaires

Hébergement Web