Prob - Sessions - Seulement un utilisateur peut se connecter

Petit nouveau ! | 2 Messages

25 avr. 2006, 20:18

Bonjour à tous,

Bon je sais qu'il y a déjà des tonnes de posts sur ce problème, mais je dois avouer que je reste sans comprendre quelquechose:

J'ai un site, une partie que je veux publique, une autre privée.
J'ai pensé à utiliser les sessions PHP pour cela. Chaque page aurait sa liste de permissions (especes de flags). Et chaque utilisateur aura certains de ses flags activés ou non.

Bien maintenant, il y a une chose que je ne comprends pas:
Une session fonctionne comme ca non? :
-> arrive sur le site
-> entre un mot de passe et login
-> verifie si l'utilisateur existe
-> s'ouvre la session avec ses variables de sessions
-> ?ces informations sont enregistrées dans un fichier sur le serveur?
-> on opère à travers de PHP

Le problème que je rencontre:
Si quelqu'un se connecte, une session s'ouvre. Et a partir de ce moment là, n'importe qui peut voir les pages jusqu'à ce que cet utilisateur ferme son navigateur!!!
De plus si une personne est connectée, personne d'autre peut se logguer. Et c'est comme si toute autre personne qui arrive serait en train d'utiliser le compte de celui qui s'est connecté en premier lieu.

Je suis débutant et je me base sur ce que je vois dans les tutoriaux. Ce fichier de session, ne devrait-il pas être différent pour chaque utilisateur?
Si qqn a un bon tutorial qui permettent de faire ce que je veux, je suis preneur. Cela dit j'ai déjà visité pas mal de sites/tutos.

Merci

Mammouth du PHP | 1967 Messages

25 avr. 2006, 20:25

si possible, met nous les codes de session de tes pages (connection,vérification et en-tete de page)

on y vera plus clair
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Petit nouveau ! | 2 Messages

25 avr. 2006, 20:45

Code : Tout sélectionner

<?php session_start(); $fecha=date("d-m-y"); $hora=date("G:i"); $host = ....; $user = ...; $bdd = ....; $passwd = ...; echo " ....codigo html.... "; // note: $username et $pass sont recuperees d'un formulaire // On commence par récupérer les champs if(isset($_POST['username'])) $user=$_POST['username']; else $username=""; if(isset($_POST['pass'])) $pass=$_POST['pass']; else $pass=""; // On vérifie si les champs sont vides if(empty($username) OR empty($pass)) { echo "<p class=\"msjerr\">Error. No ha introducido su login y/o su contrase&ntilde;a</p>"; } // Aucun champ n'est vide else { // connexion à la base $db = mysql_connect($host, $user,$passwd) or die('Erreur de connexion '.mysql_error()); // sélection de la base mysql_select_db($bdd) or die('Erreur de selection '.mysql_error()); // on écrit la requête sql $query = "SELECT choses FROM table WHERE condition"; $result = mysql_query($query); $num_rows = mysql_num_rows($result); $row = mysql_fetch_row($result); $passindb = $row[0]; $userid = $row[1]; $rank = $row[2]; if ($num_rows>0) { if ($passindb == $pass) { session_register ("username"); session_register ("userid"); session_register ("rank"); echo "<p class=\"msj\">Conectado!</p>"; } else { echo " <p class=\"msjerr\">Error de contrase&ntilde;a!</p> "; } mysql_close(); // on ferme la connexion } else { echo "<p class=\"msjerr\">Error. No se ha encontrado ningun miembro con este nombre. <$username></p>"; } } echo " ....codigo html.... "; ?>

Cette page sert a l'ouverture de la session, rien de plus. Après si quelqu'un d'autre essaye de se logguer, il se passe ce que j'ai expliqué avant. ps: c'est une page pour des utilisateurs espagnols donc ne vous étonnez pas pour les "codigo" et autres "fecha"... :)

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

25 avr. 2006, 22:03

vous devez utiliser la variable $_SESSION. Tous les éléments de $_SESSION sont automatiquement enregistrés. Si votre script utilise session_register(), il ne fonctionnera pas dans les environnements où register_globals est désactivée.
remplace:
session_register ("username"); 
par
$_SESSION["username"]=$username; 
de même pour les autres

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 377 Messages

25 avr. 2006, 22:56

Le problème que je rencontre:
Si quelqu'un se connecte, une session s'ouvre. Et a partir de ce moment là, n'importe qui peut voir les pages jusqu'à ce que cet utilisateur ferme son navigateur!!!
De plus si une personne est connectée, personne d'autre peut se logguer. Et c'est comme si toute autre personne qui arrive serait en train d'utiliser le compte de celui qui s'est connecté en premier lieu.
Nan, ça ne marche pas comme ça ;)
en fait quand tu ouvres une session, le serveur va regarder (dans la configuration par défaut) si le client a un cookie correspondant à cette session. Si ce n'est pas le cas, il crée un identifiant de session UNIQUE qu'il enregistre et va placer dans le cookie du client.
Par contre si il trouve ce cookie, il va comparer avec la liste de ses sessions ouvertes. Si il y a correspondance, il réassocie la bonne session avec le bon client, ce qui permet de faire suivre les infos d'une page et l'autre. Et comme l'identifiant de session est unique, tu peux avoir plusieurs sessions ouvertes en même temps, avec des privilèges différents, chacun récuperera ses informations sans aucun probleme.

Voilà, j'espère que je t'ai un peu éclairé ;)
Petit scarabée deviendra grand