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 04/03/2011, 15h34   #1
Membre confirmé
 
Avatar de baggie
 
Inscription : octobre 2007
Messages : 676
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2007
Messages : 676
Points : 225
Points : 225
Par défaut Session qui se "ferme" au bout de 2 pages

Bonjour,

j'ai créé un site avec une zone d'authentification (login+mot de passe).
Quand on se connecte, on entre dans la partie privée, on clique sur des liens du menu et voila. Usage normal quoi.

Enfin sous Chrome en tout cas.

Sous firefox et IE, j'ouvre bien ma première page une fois qu'on est connecté, mais si je clique sur un autre lien du menu, hop, je reviens à ma page d'authentification.

Et c'est le même comportement sur les deux navigateurs, aucune page spécifique. Au bout de la seconde ouverture, hop je reviens au départ.

Est-ce que cela vient d'une session ? Un problème autre ?

Si vous avez des idées je veux bien parce que là ...
baggie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 16h02   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 014
Points : 5 014
Hello

Tu as pensé à vérifier le life time de ta session ?
Code :
1
2
 
session.cookie_lifetime = 0
pour un cookie qui n'expire pas.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 16h08   #3
Membre confirmé
 
Avatar de baggie
 
Inscription : octobre 2007
Messages : 676
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2007
Messages : 676
Points : 225
Points : 225
Dans mon php.ini j'ai :
Citation:
session.cookie_lifetime = 0
ça devrait suffire non ?
baggie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 16h56   #4
Membre Expert
 
Avatar de riete
 
Homme Thierry
NFC & DevWeb
Inscription : avril 2006
Messages : 1 175
Détails du profil
Informations personnelles :
Nom : Homme Thierry
Âge : 51
Localisation : France

Informations professionnelles :
Activité : NFC & DevWeb
Secteur : Bâtiment

Informations forums :
Inscription : avril 2006
Messages : 1 175
Points : 1 366
Points : 1 366
Il est très difficile de te fournir une réponse fiable car les raisons peuvent multiples étant donné que la méthode que tu utilise n'est pas connue (puisque tu ne l'explique pas).

Mais avec les infos que tu donnes, tu peux déjà essayé d'afficher le contenu de ta print_r($_SESSION) et de print_r($_COOKIE) pour voir ce qu'il se passe.
riete est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 17h02   #5
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 014
Points : 5 014
Également vérifie l'expiration des sessions au niveau d'apache.

Ce serait plus simple si tu nous donnais le contexte dans lequel tu travailles (OS, Serveur HTTP, version de PHP etc.)

C'est peut être idiot mais vérifie bien qu'il n'y a pas un bout de code qui traine quelque part et qui ferme la session.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 08h27   #6
Membre confirmé
 
Avatar de baggie
 
Inscription : octobre 2007
Messages : 676
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2007
Messages : 676
Points : 225
Points : 225
Ah oui mince, oublié de donner les détails.
Donc je suis sous EasyPHP 5.3.1.0, PHP 5, Windows XP.

Pour me connecter :
Code :
1
2
3
4
 
session_start();
 
$_SESSION['login'] = $login;
Sinon pour les print_r :
- le print_r($_SESSION) affiche la même chose sur les différents navigateurs.
- le print_r($_COOKIE) affiche moins de valeurs sur Firefox que sur Chrome : j'ai deux valeurs [__utma] et [__utmz] en plus mais aucune idée de ce à quoi ça correspond

Hum, j'y pense ... Est-ce qu'un "session_start()" en trop (par exemple un session_start() non nécessaire) pourrait faire casser une session et revenir au départ ?

Pour l'expiration des sessions dans Apache, comment je le vois ?

[EDIT] J'ai une page me permettant d'afficher les informations du compte sur lequel je m'authentifie. Quand je souhaite afficher celles-ci, je n'ai que des undefined, comme si mes valeurs de session avaient été supprimées. D'où le fait que je revienne ensuite sur l'authentification.
J'ai donc ce cheminement :
- authentification
-> session et variables de session OK
- clic sur une page
-> destruction des variables de session
- clic sur une autre page
-> demande d'authentification car plus de variable de session

Dans mon header, j'ai ceci :
Code :
1
2
3
4
5
6
7
8
9
 
$(window).unload( function() {
	$.ajax({
		type: 'GET',
		url: 'deconnexion.php',
		success: function(html) {
		}
	});
});
Normalement, cela s'exécute quand on quitte le navigateur. Mais est-ce que sous Firefox et IE, c'est interprété comme 'on change de page' ?

[EDIT 2] : le problème vient bien de mon dernier code. Donc maintenant, reste à savoir comment exécuter ma page de déconnexion quand je ferme le navigateur ! Si vous avez une idée ...
baggie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 13h50   #7
Membre émérite
 
Avatar de alain31tl
 
Alain
Inscription : novembre 2005
Messages : 897
Détails du profil
Informations personnelles :
Nom : Alain
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : novembre 2005
Messages : 897
Points : 910
Points : 910
Citation:
Envoyé par baggie Voir le message
Donc maintenant, reste à savoir comment exécuter ma page de déconnexion quand je ferme le navigateur ! Si vous avez une idée ...
Salut

A priori, il n'y a pas de solution, sauf si c'est intentionnel de la part de l'utilisateur.
Bouton " Me déconnecter", par exemple.

Mais dans la majorité des cas, les visiteurs ferment tout simplement le navigateur.
Ce qui a pour conséquence de brider toute action côté scripts.
Plus de connexion = Plus d'interaction avec ton www.
__________________
Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.
alain31tl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 14h04   #8
Membre Expert
 
Avatar de riete
 
Homme Thierry
NFC & DevWeb
Inscription : avril 2006
Messages : 1 175
Détails du profil
Informations personnelles :
Nom : Homme Thierry
Âge : 51
Localisation : France

Informations professionnelles :
Activité : NFC & DevWeb
Secteur : Bâtiment

Informations forums :
Inscription : avril 2006
Messages : 1 175
Points : 1 366
Points : 1 366
As tu regardé onunload() ?
riete est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 14h35   #9
Membre confirmé
 
Avatar de baggie
 
Inscription : octobre 2007
Messages : 676
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2007
Messages : 676
Points : 225
Points : 225
Merci pour vos réponses.

riete > ça ne fonctionne pas comme je voudrais, comme si ma page n'était pas lancée (deconnexion.php).

alain31tl > j'ai bien un bouton de déconnexion donc si l'utilisateur clique dessus ce sera bon. Ce qui est dommage, c'est que ça fonctionnait bien avec Chrome, mais pas avec IE et Firefox

A moins que vous ayez une autre solution pour pouvoir enregistrer la date du jour au moment où l'on quitte le web ? (pour qu'ensuite, à la prochaine reconnexion on obtienne la date de dernière connexion).
baggie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 14h48   #10
Membre émérite
 
Avatar de alain31tl
 
Alain
Inscription : novembre 2005
Messages : 897
Détails du profil
Informations personnelles :
Nom : Alain
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : novembre 2005
Messages : 897
Points : 910
Points : 910
Citation:
Envoyé par baggie Voir le message
A moins que vous ayez une autre solution pour pouvoir enregistrer la date du jour au moment où l'on quitte le web ? (pour qu'ensuite, à la prochaine reconnexion on obtienne la date de dernière connexion).
Celà revient precisemment à ce que je soulignais precedemment.
Si on quitte le web, plus d'interaction, donc scripts inopérants.

En revanche, tu peux toujours enregistrer une session et ses composants en base de données, ceci au moment de l'identification, ou/voire au fur et à mesure de la visite.
__________________
Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.
alain31tl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 14h49   #11
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
contente toi de donnée l'heure de la derniere fois que ton utilisateur a appelé une page sur ton site. ça suffira comme approximation.
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 15h00   #12
Membre confirmé
 
Avatar de baggie
 
Inscription : octobre 2007
Messages : 676
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2007
Messages : 676
Points : 225
Points : 225
Sauf que l'heure je trouve ça un peu moins important

Et si je fais deux champs dans ma base de données :
- oldconnexion
- newconnexion

Quand je me connecte, j'enregistre la date du jour dans newconnexion, et la date qui était avant dans newconnexion, je la passe dans oldconnexion et j'affiche celle-ci.

J'aurai bien ma date de dernière connexion du coup ?

C'est tordu mais ça peut le faire ?
baggie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 15h07   #13
Membre émérite
 
Avatar de alain31tl
 
Alain
Inscription : novembre 2005
Messages : 897
Détails du profil
Informations personnelles :
Nom : Alain
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : novembre 2005
Messages : 897
Points : 910
Points : 910
Dans ce cas là et si celà te convient, utilise plutôt timestamp, bien plus précis.
Enuite, c'est juste une histoire de comparaison.
Si < ....
Si > ....
etc...
__________________
Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.
alain31tl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 15h11   #14
Membre confirmé
 
Avatar de baggie
 
Inscription : octobre 2007
Messages : 676
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2007
Messages : 676
Points : 225
Points : 225
Est-ce utile si je veux juste récupérer le jour, le mois et l'année ?

Par contre, je dois bien garder les deux dates si je veux à chaque fois afficher l'ancienne date et non la nouvelle, non ?
baggie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 15h20   #15
Membre émérite
 
Avatar de alain31tl
 
Alain
Inscription : novembre 2005
Messages : 897
Détails du profil
Informations personnelles :
Nom : Alain
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : novembre 2005
Messages : 897
Points : 910
Points : 910
L'un n'empêche pas l'autre.
Tu peux utiliser timestamp pour réaliser ta comparaison.
Et dans le même temps, conserver aussi les dates complétes en base de données.
Soit olddate ou newdate.
Timestamp, c'est juste pour te faciliter la tâche dans cette démarche.
__________________
Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.
alain31tl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 15h34   #16
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 014
Points : 5 014
Je n'arrive pas à comprendre le but de ta démarche. Pourquoi veux tu que la session soit détruite quand l'utilisateur quitte le site ? Y a t'il une logique particulière de sécurité derrière qui pourrait être mise en place avec un configuration au niveau d'apache ?

Généralement, on préfère mettre un time to live assez court à une session que l'on veut sécuriser (de l'ordre des 2 minutes comme chez free.fr par exemple).
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 15h40   #17
Membre confirmé
 
Avatar de baggie
 
Inscription : octobre 2007
Messages : 676
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2007
Messages : 676
Points : 225
Points : 225
Hum, c'est pas mieux de détruire une session quand on quitte un navigateur ? Si par exemple, on n'est pas sur un ordi perso ? Après je peux me planter effectivement
baggie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 15h50   #18
Membre émérite
 
Avatar de alain31tl
 
Alain
Inscription : novembre 2005
Messages : 897
Détails du profil
Informations personnelles :
Nom : Alain
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : novembre 2005
Messages : 897
Points : 910
Points : 910
Citation:
Envoyé par baggie Voir le message
Si par exemple, on n'est pas sur un ordi perso ?
Un cookie est persistant sur un pc, tant que les temp ne sont pas effacés.
Une session "PHP" a une durée de vie...relativement courte.
__________________
Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.
alain31tl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 15h51   #19
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 707
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 707
Points : 3 277
Points : 3 277
Salut

Citation:
Par contre, je dois bien garder les deux dates si je veux à chaque fois afficher l'ancienne date et non la nouvelle, non ?
Ca dépend de quelle manière tu détecte que l'utilisateur se déconnecte.

Admettons que tu adopte le principe qu'a donné Alain31tl, soit un bouton/lien de déconnexion (page deconnexion.php, comme pour ce forum, qui à mon sens est le moyen le plus fiable), et bien sa dernière connexion c'est celle ci, la déconnexion, c'est justement sa dernière action en temps qu'utilisateur connecté, après, elle ne le sera plus.
C'est ça la réalité, non ?

Pourquoi la fausser ?
Pourquoi donc ce compliquer la vie d'enregistrer la date précédente ?

D'ailleurs, c'est ainsi que fonctionne les sessions, il n'y a pas 2 dates. La date de dernière action c'est la date de dernière modification du fichier.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 16h10   #20
Membre émérite
 
Avatar de alain31tl
 
Alain
Inscription : novembre 2005
Messages : 897
Détails du profil
Informations personnelles :
Nom : Alain
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : novembre 2005
Messages : 897
Points : 910
Points : 910
RunCodePhp

J'ai répondu en fonction de la requête du moment et qu'il a formulée, c'est tout.
Et je n'impose pas de méthode.
Aprés tout, je ne connais pas ses besoins précis et les raisons rationnelles qui nécessitent cette élaboration...
Et si tel était le cas, je répondrais peut-être differemment, pour ensuite développer plus en profondeur.
__________________
Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.
alain31tl 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 15h55.


 
 
 
 
Partenaires

Hébergement Web