Votre question

Problèmes avec sessions php

Tags :
  • Php
  • Programmation
Dernière réponse : dans Programmation
7 Mai 2009 09:02:58

salut, j'ai un site web que j'ai sécurisé avec des sessions php mais j'ai un problème.
En fait j'ai une page de login et je peux m'identifier avec divers log et mot de passe qui m'oriente vers un espace propre.Je veux pouvoir etre identifié avec les memes log et mot de passe sur plusieurs pc différents pour ca pas de problème ça marche.Par contre j'ai testé sur le site et si je me déconnecte sur un espace, je suis aussi déconnecté sur l'autre alors que ce n'est pas la meme session normalement!
Enfait j'ai un lien déconnexion qui effectue la fonction suivante :

function deconnexion()
{
//démarrage de la session
session_start();
session_unset() ;
//destruction de la session
session_destroy();
//header(Location : /gestion09/login.php); fonctionne mais la page de login s'affiche dans
//les frames(php s'exécute côté serveur), javaScript s'exécute côté client
?>
<script language="JavaScript">
top.location.replace ('/gestion09/login.php')
</script>
<?php
exit;
}

j'ai testé sur un seul PC mais si j'ouvre 2 sessions différentes dans 2 fenêtres avec des log et mot de passe diférents, si je clique sur déconnexion dans une fenêtre, ça me déconnecte dans l'autre fenêtre aussi!
En fait si je fait une autre action sur la fenetre où je n'ai pas fait "déconnexion" ça me renvoie vers la page de login comme si j'étais déconnecté aussi.
comment remédier à cela?

Autres pages sur : problemes sessions php

7 Mai 2009 10:26:21

Le fait d'avoir 2 fenêtres ouvertes ne signifie pas que c'est 2 sessions

7 Mai 2009 10:32:56

je me suis fait mal comprendre mais simplement dans 2 fenetres différentes je me connecte avec 2 identifiants différents donc en l'occurence c'est bien 2 différentes sessions
voila la vérification du login
<?php
//si la variable superglobale $_POST existe et que les champs ne sont pas vides
if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['password']))
{
//connexion à la base
require("config.php3");
$connexion=mysql_connect($host, $log, $passe);
mysql_select_db($base);
//on récupère les champs login et password en évitant les caractères html
$pseudo=htmlspecialchars($_POST['login']);
$password=htmlspecialchars($_POST['password']);
//récupération des informations du membre par rapport au pseudo entré
$query="SELECT * FROM membre where pseudo='$pseudo'";
$resultat=mysql_query($query, $connexion);
$donnees=mysql_fetch_array($resultat);
//comparaison du mot de passe entré et du mot de passe en base(hashage)
//si bon mot de passe
if(md5($password)==$donnees['id'])
{ //si il appartient au groupe afpa(afpa, rep03, moi09)
if($donnees['groupe']=="afpa")
{
//démarrage d'une session
session_start();
//enregistrement des variables sessions : identifiant, droit(répertoire),
//groupe(afpa ou mission) et heure de l'accès à la page pour la gestion du délai d'inactivité
$_SESSION['id']=$donnees['id_membre'];
$_SESSION['droit']=$donnees['destination'];
$_SESSION['groupe']=$donnees['groupe'];
$_SESSION['dernier_acces']=time();
//redirection vers l'index où le traitement des sessions sera fait
header("Location: afpa/index.php");
exit;
}
//si il appartient au groupe mission locale
else if($donnees['groupe']=="mission locale")
{
//démarrage d'une session
session_start();
//enregistrement des variables sessions
$_SESSION['id']=$donnees['id_membre'];
$_SESSION['droit']=$donnees['destination'];
$_SESSION['groupe']=$donnees['groupe'];
$_SESSION['ville']=$donnees['ville'];
$_SESSION['nom']=$donnees['nom'];
$_SESSION['dernier_acces']=time();
header("Location: afpa/index.php");
exit;
}

//si c'est un ajout d'identifiants
else if($donnees['groupe']=="administration")
{
//démarrage de la session
session_start();
//enregistrement des variables sessions
$_SESSION['id']=$donnees['id_membre'];
$_SESSION['groupe']=$donnees['groupe'];
$_SESSION['ville']=$donnees['ville'];
$_SESSION['nom']=$donnees['nom'];
$_SESSION['dernier_acces']=time();
header("Location: ajoutIdent.php");
exit;
}
}
//si mauvais mot de passe
else
{
//affichage d'un message d'erreur
echo "<font color='red'><center>mauvais login ou mot de passe</center></font>";
//affichage du formulaire d'identification
include("login.php");
exit;
}

}
//si les variables sessions n'existent pas ou sont vides
else
{
//affichage message d'erreur
echo "<font color='red'>remplissez tous les champs</font>";
//affichage du formulaire d'identification
include("login.php");
exit;
}
?>


un peu compliqué mais pour chaque identifiants de la bdd je crée une session donc c'est bien 2 sessions.
Mais en me déconnectant dans une session je suis déconnecté dans l'autre aussi
Contenus similaires
7 Mai 2009 10:59:11

Citation :
je me suis fait mal comprendre mais simplement dans 2 fenetres différentes je me connecte avec 2 identifiants différents donc en l'occurence c'est bien 2 différentes sessions


Je ne crois pas

Le truc c'est que tu stocke 2 valeurs différentes dans la même variable :

$_SESSION['id']=$donnees['id_membre'];

Le fait que ce ça ne soit pas le même utilisateur ( login, mdp ) n'y change rien, la solution reste donc, d'utiliser un deuxième navigateur ou une autre machine.

7 Mai 2009 11:02:40

ah d'accord je vois!
donc tu pense que si j'ouvre une session sur un PC et une autre session sur un autre PC avec les memes identifiants, si je me déconnecte sur un PC ça ne fermera pas la session de l'autre?
7 Mai 2009 11:06:00

ben je viens de tester avec un autre navigateur sur le meme pc et en effet ça fonctionne comme ça.
Ca me convient à peu près mais quand meme comment pourrais je faire pour pouvoir faire plusieurs sessions avec le meme navigateur?
merci de ton aide quand meme j'étais un peu perdu
7 Mai 2009 11:09:15

Normalement non, mais je n'en suis pas sur, à vérifier.
Car ce qui définit que l'utilisateur est connecté c'est la variable de session.

Pour l'inverse en revanche il faudrait stocker une valeur dans la bdd et l'interroger à chaque rafraichissement.

Edit : plusieurs session sur le même navigateur, est-ce vraiment utile? je ne sais pas sur quoi tu bosse mais deux utilisateurs sur le même poste c'est rare.
7 Mai 2009 13:00:21

plusieurs sessions sur le meme poste ça serait pour par exemple avoir une session en utilisateur qui a accès à un certain espace et une autre pour un autre espace
7 Mai 2009 13:28:22

Tu pourrais aussi attribuer l'accès aux 2 espaces à 1 utilisateur
7 Mai 2009 14:22:16

oui mais un utilisateur avec pas mal de droit devrait avoir accès à une dizaine d'espaces différents donc ça ferais très moche.
en fait il y a des utilisateurs qui correspondent à des villes et chaque ville voit ses inscriptions et pas celle des autres. Les utilisateurs avec plus de droit voient toutes les inscriptions ce qui est assez conséquent.
C'est pas pour moi en fait mais mon chef veut cette facon, pouvoir ouvrir plusieurs sessions différentes avec le meme navigateur si possible
7 Mai 2009 14:37:32

Eh bien d'après moi c'est impossible. Donc ton chef va devoir faire autrement
7 Mai 2009 15:01:08

ok c'est pas grave il est jamais content.
merci beaucoup de ton aide
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS