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 29/03/2006, 15h08   #1
Membre à l'essai
 
Inscription : mars 2006
Messages : 30
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 30
Points : 20
Points : 20
Par défaut Probleme avec les sessions.

Bonjour.

J essaie de faire une ptite page statistique sur mes pages mais je rencontre un probleme avec les sessions.


Quand un utilisateur s authentifie , j' enregistre le session_id() avec plin d autre info dans une table statistique.
Si l utilisateur ferme son navigateur , la pas de probleme , quand il se reconnect , il y a une nouvelle id de session .
Par contre si l utilisateur clik sur " se deconnecter" et qu il se reconnect , il garde la meme id de session.

Quand l utilisateur clik sur " se deconnecter " je l envoi sur une page logout.php:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
<?php
// On appelle la session
session_start();
 
// On écrase le tableau de session
$_SESSION = array();
 
// On détruit la session
session_unset();
session_destroy();
 
header("Location: http://" . $_SERVER['HTTP_HOST'] . "/site test/index.php");	
?>
J ai lu que session_destroy() detruisait toute les variables de la session mais elle ne le fait pas.

Si vous savez comment m aider... merci par avance
kilanepa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2006, 15h19   #2
Membre à l'essai
 
Inscription : mars 2006
Messages : 30
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 30
Points : 20
Points : 20
Je viens de trouver un autre souci . Si l utilisateur A se deconecte et qu un utilisateur B se connecte de suite après , il garde le meme SID que A .
Chelou ...
kilanepa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2006, 15h28   #3
Membre actif
 
Inscription : septembre 2005
Messages : 183
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 183
Points : 175
Points : 175
Envoyer un message via Yahoo à polace
Slt , envoie le code complet
__________________
la succession d'évènement que nous subissons toute notre vie n'est qu'un phénomène de compensation dont la nature en est l'arbitre.[Inéluctabilité de la nature ] Polace
polace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2006, 15h37   #4
Membre à l'essai
 
Inscription : mars 2006
Messages : 30
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 30
Points : 20
Points : 20
Lorsque l utilisateur se connect :
la page verif.php:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
 
<?php
include('connectdb.php');
 
// On démarre la session
 session_start();
$loginOK = false;  // cf Astuce
 
// On n'effectue les traitement qu'à la condition que
// les informations aient été effectivement postées
if ( isset($_POST) && (!empty($_POST['login'])) && (!empty($_POST['mdp'])) ) {
	$login = $_POST['login'] ;
 
  // On va chercher le mot de passe afférent à ce login
  $sql = "SELECT id,civilite,nom,prenom,fonction,id_client,id_part,login, motdepasse FROM contacts WHERE login = '".addslashes($login)."'";
 
  $req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);
  $num = mysql_num_rows($req);
 
  // On vérifie que l'utilisateur existe bien
  if ($num > 0) {
 
     $row = mysql_fetch_assoc($req);
 
    // ' login trouvé ...' ;
    // On vérifie que son mot de passe est correct
	$mdp = $_POST['mdp'];
 
    if ($mdp == $row['motdepasse']) {
      $loginOK = true;
    }
  }
}
 
// Si le login a été validé on met les données en sessions
if ($loginOK) {
  $_SESSION['id'] = $row['id'];
  $_SESSION['civilite'] = $row['civilite'];
  $_SESSION['nom'] = $row['nom'];
  $_SESSION['prenom'] = $row['prenom'];
  $_SESSION['fonction'] = $row['fonction'];
  $_SESSION['id_client'] = $row['id_client'];
  $_SESSION['id_part'] = $row['id_part'];
  $_SESSION['login'] = $row['login'];
  $_SESSION['premiereco'] = time();
  $_SESSION['connecte'] = true ;
 
  //on redirige vers le main ... 
 	header("Location: http://" . $_SERVER['HTTP_HOST'] . "/site test/main.php");
 
}
else {
  header("Location: http://" . $_SERVER['HTTP_HOST'] . "/site test/index.php");
}
?>


ca le stat.php

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
 
<?php
// connexion a la bdd
include('connectdb.php');
 
// on ouvre la session
session_start();
 
if(!isset($_SESSION['parcours']))
{
	// il s'agit d'un nouveau visiteur
 
 
	// on crée $_SESSION['parcours'] et $_SESSION['time']
	$_SESSION['time'] = time();
	$_SESSION['parcours']= $_SERVER['REQUEST_URI'];
	$time = $_SESSION['time'];
	$parcours=$_SESSION['parcours'];
 
 
 
	// ON CRÉE UN ENREGISTREMENT DANS LA TABLE
	//  champs referer :  pour savoir d ou l utilisateur est arrivé sur le site
	//  parcours            : le cheminement des pages qu a parcouru l utilisateur 
	// sessid                  : session_id()
	// user                     : le nom d utilisateur
	// time                     : le temps resté sur chaque page , le champs time est un entier qui represente le nombre de seconde depuis la date reference ( 1970 ...... )
	//$sql = "INSERT INTO statistique (referer,parcours,sessid,user,time)";
	$sql = "INSERT INTO statistique (sessid,referer,parcours,id_contact,time,id_partenaire,id_client)";
	echo $sql .= "VALUES ('".session_id()."','".$_SERVER['HTTP_REFERER']."','".$parcours."',
		'".$_SESSION['id']."','".$time."','".$_SESSION['id_part']."','".$_SESSION['id_client']."')";
}
else
{
	//utilisateur deja connecté au site
	// on ajoute la nouvelle page vue, séparée par un point virgule, à la variable de session
	$_SESSION['parcours'] .= '; '.$_SERVER['REQUEST_URI'];
 
	// on ajoute à la variable de session l'heure à laquelle la page a été vue
	$_SESSION['time'] .= '; '.time();
 
	// ON MET LA TABLE À JOUR
	$parcours = $_SESSION['parcours']; 
	$time = $_SESSION['time'];
 
 
	$sql = "UPDATE statistique SET parcours='".$parcours."' , time='".$time."' ";
	echo $sql .= "WHERE sessid='".session_id()."' AND id_contact ='".$_SESSION['id']."'";
}
mysql_query($sql) or die('erreur'.$sql);
sur toute mes page je fait un include('stat.php')

Sur la page main.php , lorqu on clik sur deconnexion on appelle la page logout.php:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
<?php
// On appelle la session
session_start();
 
// On écrase le tableau de session
$_SESSION = array();
 
// On détruit la session
session_unset();
session_destroy();
 
header("Location: http://" . $_SERVER['HTTP_HOST'] . "/site test/index.php");
Voila j espere que ca pourra vous aider.
kilanepa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2006, 15h39   #5
Membre confirmé
 
Avatar de allyson
 
Inscription : août 2003
Messages : 248
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 248
Points : 232
Points : 232
Envoyer un message via Yahoo à allyson
Citation:
session_start() au tout début de la page!!!
__________________
.: and Justice for all :.
------------------------------------------------------------
Membre du jury de l'élection de Mister DVP.com
les règles du forum
de penser au tag
allyson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2006, 15h53   #6
Membre à l'essai
 
Inscription : mars 2006
Messages : 30
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 30
Points : 20
Points : 20
Citation:
Envoyé par allyson
Citation:
session_start() au tout début de la page!!!
Désolé je comprend pas.
kilanepa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2006, 15h54   #7
Membre confirmé
 
Avatar de allyson
 
Inscription : août 2003
Messages : 248
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 248
Points : 232
Points : 232
Envoyer un message via Yahoo à allyson
tu devrais mettre ton session_start() avant tes include
__________________
.: and Justice for all :.
------------------------------------------------------------
Membre du jury de l'élection de Mister DVP.com
les règles du forum
de penser au tag
allyson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2006, 15h59   #8
Membre actif
 
Avatar de Ricou13
 
Inscription : août 2002
Messages : 291
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 291
Points : 175
Points : 175
Salut,

A priori, il le fait puisqu'il inclut "stat.php" sur chacune de ses page et que cette page contient "session_start"
__________________
il ne faut pas de tout pour faire un monde. Il faut du bonheur et rien d'autre. Paul Eluard
Des fois ça malche, des fois ça malche pas. Garcimore
Ricou13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2006, 16h01   #9
Membre actif
 
Avatar de Ricou13
 
Inscription : août 2002
Messages : 291
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 291
Points : 175
Points : 175
Ou alors tu veux dire que "sessions_start()" doit impérativement être la première ligne de code des page, avant quoi que se soit d'autre ?
__________________
il ne faut pas de tout pour faire un monde. Il faut du bonheur et rien d'autre. Paul Eluard
Des fois ça malche, des fois ça malche pas. Garcimore
Ricou13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2006, 16h03   #10
Membre confirmé
 
Avatar de allyson
 
Inscription : août 2003
Messages : 248
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 248
Points : 232
Points : 232
Envoyer un message via Yahoo à allyson
Citation:
Envoyé par Ricou13
Ou alors tu veux dire que "sessions_start()" doit impérativement être la première ligne de code des page, avant quoi que se soit d'autre ?
il doit être mis avant les echo et les envois d'entêtes ...
__________________
.: and Justice for all :.
------------------------------------------------------------
Membre du jury de l'élection de Mister DVP.com
les règles du forum
de penser au tag
allyson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2006, 16h26   #11
Membre à l'essai
 
Inscription : mars 2006
Messages : 30
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 30
Points : 20
Points : 20
Ok certes il doit etre mis avant. Le probleme n est pas mais sur le fait que quand on se deconnect puis on se reconnect sans avoir fermé le navigateur , la session_id reste la meme quel que soit l utilisateur sur le meme poste.
kilanepa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2006, 17h28   #12
Membre à l'essai
 
Inscription : mars 2006
Messages : 30
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 30
Points : 20
Points : 20
j ai trouvé une solution bourrin.

Je test dans la base si le sessid existe pas deja . Si il existe je fait un session_regenerate_id();

En esperant que ca ne fasse pas tro ramer le serveur quand la base sera bien grande ...
kilanepa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2006, 17h36   #13
Membre expérimenté
 
Avatar de tigunn
 
Homme
Développeur de bug
Inscription : janvier 2003
Messages : 526
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur de bug

Informations forums :
Inscription : janvier 2003
Messages : 526
Points : 548
Points : 548
SAlut kilanepa,

ce probleme m'est deja arrive, et comme d'autres avant moi te l'on écrit le probleme venait du fait que la session etait crée (par session_start) mais après l'envoi d'autres infos au browser comme les includes.
J'étais tellement persuade qu'il ne faisait rien avant l'ouverture de session, que j'ai perdu beaucoup de temp sur des solutions bourrin (dsl).
Pour parer le probleme, je developpe avec firefox et certains pllugins TROP UTILE comme http-headers (je crois) qui affiche justement les entêtes de page php. (note ce sont des infos non-affichées par le browser).

Bref, faut jeter un coup d'oeil aux plugins additionnels que propose firefox pour les developpeurs sur son site.

bon dev'
tigunn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2006, 14h32   #14
Membre à l'essai
 
Inscription : mars 2006
Messages : 30
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 30
Points : 20
Points : 20
Merci beaucoup tigunn . Jvais aller regarder ca.
kilanepa 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 22h55.


 
 
 
 
Partenaires

Hébergement Web