Maintenir Session

Fermé
TRUNCKS Messages postés 1017 Date d'inscription vendredi 10 août 2007 Statut Membre Dernière intervention 8 novembre 2024 - Modifié par TRUNCKS le 22/05/2011 à 08:00
 le père - 22 mai 2011 à 14:58
Bonjour à vous,

J'ai une page qui permet de se logger au moyen d'un mot de passe et d'un identifiant.
Lorsque l'utilisateur se logge, il se crée un identifiant aléatoire et on est rediriger vers la page.

Seulement, à partir de cette page, l'identifiant aléatoire est bien utilisé, mais si je change de page, il me redemande le mot de passe et l'id aléatoire est perdue.
( En gros, cela ne marche que sur la première page )

Ma question est: comment maintenir la session de l'utilisateur sur plusieurs pages.

Voici ce que je met au début de la première page:


<?php 
require("conf.php"); 
// CONNEXION MYSQL 
$db_link = @mysql_connect($sql_serveur,$sql_user,$sql_passwd); 
if(!$db_link) {echo htmlspecialchars("Connexion impossible à la base de données <b>$sql_bdd</b> sur le serveur <b>$sql_server</b><br>Vérifiez les paramètres du fichier conf.php"); exit;} 
// SELECTION DE L'ENREGISTREMENT CONTENANT L'ID EN COURS 
$requete=mysql_db_query($sql_bdd,"select * from membre where id=\"$id\"",$db_link) or die(mysql_error()); 
// SI L'ID N'EXISTE PAS 
if(mysql_num_rows($requete)==0) 
 { 
 // REDIRECTION PAGE ERREUR 
 header("Location:$url_erreur"); 
 exit; 
 } 
// LIGNE FACULTATIVE : RECUPERATION DU PSEUDO 
$pseudo_membre=mysql_result($requete,0,"pseudo"); 

?> 


7 réponses

Bonjour

Pour maintenir une session, il suffit de faire appel à session_start() au début de chaque script.
Si cette ligne n'est pas conf.php, il faut que tu l'ajoutes (avant le require("conf.php"); ou dans le conf.php)
D'autre part, d'où vient ta variable $id ? Si c'est d'une session, tu aurais dû l'initialiser quelque part avec $id=$_SESSION['id'], est-ce ben le cas ?
0
TRUNCKS Messages postés 1017 Date d'inscription vendredi 10 août 2007 Statut Membre Dernière intervention 8 novembre 2024 7
22 mai 2011 à 10:54
Merci a toi,

En fait l'id n'est pas le ID auto incrémenté de la bdd mais un variable qui 'accueille l'identifiant aléatoire pour la connexion.
0
De quel identifiant aléatoire parles-tu alors ? ou apparaît-il dans le script de ton 1er message ?
Mais surtout, as-tu bien partout des session_start() ?
0
TRUNCKS Messages postés 1017 Date d'inscription vendredi 10 août 2007 Statut Membre Dernière intervention 8 novembre 2024 7
22 mai 2011 à 12:07
Voilà la page qui transmet les informations sur l'autre:

( Non je n'ai pas utilisé le session start, car en fait je ne sais pas exactement comme ça marche. Il faut le commercer où et le mettre où ? )

Merci à toi pour tes réponses



<?php
require("conf.php");

/*-----------------------------------------------------------------*/
/*	PROGRAMME PRINCIPAL			*/
/*-----------------------------------------------------------------*/

// CONNEXION A LA BASE DE DONNEE
$conn = mysql_connect($sql_serveur, $sql_user, $sql_passwd) or trigger_error(mysql_error(),E_USER_ERROR);mysql_select_db($sql_bdd, $conn); 


// Récupération des variables necessaires à la vérification du champ 'actif' de la BDD
$login = mysql_real_escape_string($_POST['pseudo_membre']);
				
// Récupération de la valeur du champ actif pour le login $login
$sql = "SELECT actif FROM utilisateurs WHERE pseudo = '$login' AND actif='1'";
$result = mysql_query($sql)or die(mysql_error()); 
$num_rows=mysql_num_rows($result); 
if( $num_rows == 1 )
  $actif = 1;
else
  $actif = 0;
		
// ON SELECTIONNE L'ENREGISTREMENT CONTENANT LE LOGIN ET
// MOT DE PASSE SAISIS A LA PAGE INDEX.HTM
$requete="select pseudo,passe from utilisateurs where pseudo=\"$pseudo_membre\" and passe=\"$passe_membre\"";
$row2 = mysql_query($requete)or die(mysql_error()); 


// SI AUCUN ENREGISTREMENT NE CORRESPOND
if(mysql_num_rows($row2)==0)
	{
	// REDIRECTION VERS LA PAGE ERREUR
	echo "<script type=\"text/javascript\">document.location.href='erreur.htm';</script>";
	}

// SI LE LOGIN ET MOT DE PASSE SONT EXACTES	
else
	{
		
// Il ne nous reste plus qu'à tester la valeur du champ 'actif' pour
// autoriser ou non le membre à se connecter
		
if($actif == '1') // Si $actif est égal à 1, on autorise la connexion
  {
   //...
   // On autorise la connexion...
   // CREATION D'UN IDENTIFIANT ALEATOIRE
	$taille = 20;
	$lettres = "abcdefghijklmnopqrstuvwxyz0123456789";
	srand(time());
	for ($i=0;$i<$taille;$i++)
		{
		$id.=substr($lettres,(rand()%(strlen($lettres))),1);
		}
		
	// MISE A JOUR DE L'IDENTIFIANT DANS LA TABLE 
	$requete2="update utilisateurs set id=\"$id\" where pseudo=\"$pseudo_membre\" and passe=\"$passe_membre\"";
	$row3 =  mysql_query($requete2)or die(mysql_error()); 
	
	
	// REDIRECTION VERS UNE PAGE PROTEGEE AVEC L'IDENTIFIANT SERVANT DE CLE
	echo "<script type=\"text/javascript\">document.location.href='bdd/index.php?id=$id';</script>";
	}	
   
else // Sinon la connexion est refusé...
  {
   //...
 echo "<script type=\"text/javascript\">document.location.href='enregistrement.htm';</script>";

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Avais-tu lu mon tout premier message ?
Je t'avais dit qu'il fallait un session_start() et je t'avais dit où le mettre.
Tu parles de session, mais il n'y a rien du tout dans ton programme qui y ressemble.
Je résume :
Tu DOIS avoir session_start() au début de chacun de tes scripts (avant d'envoyer quoi que ce soit au client)
Dans une page, tu enregistres les variables à garder dans le tableau superglobal $_SESSION :
$_SESSION['truc']=$unevariable;
$_SESSION['machin']=$autrevariable;

Dans l'autre page, tu récupères tes variables (après le session-start();):
$unevariable=$_SESSION['truc'];
$autrevariable=$_SESSION['machin];
0
TRUNCKS Messages postés 1017 Date d'inscription vendredi 10 août 2007 Statut Membre Dernière intervention 8 novembre 2024 7
22 mai 2011 à 12:44
D'accord je comprend mieux maintenant, c'est la même chose que te transmettre un variable d'une page à une autre mais dans une session c'est ça ?

Je ne connaissais pas le principe en fait.

Il faut sécuriser d'une façon particulière au non ?

Merci en tout cas !
0
C'est le moyen le plus simple de transmettre des variables entre toutes les pages d'un site, à ma connaissance.
Il n'y a pas de façon particulière de sécuriser : il faut de toutes manières se méfier de toutes les variables qui viennent de l'extérieur en PHP. Mais en général (pas forcément toujours), les variables de session sont mémorisées dans un fichier et donc peu susceptibles d'être modifiées hors du contrôle du script.
0