Page 1 sur 3

pb de session

Posté : 05 sept. 2005, 13:01
par isitien
Bonjour,

Franchement je ne sais pas comment utiliser les sessions + les cookies dans un espace membre, et ca affiche toujours le meme resultat:

Code : Tout sélectionner

Vous n'êtes pas autorisé à accéder à cette page!
en utilisant ca:
elseif (!session_is_registered("login") && !session_is_registered("passwd"))
{
echo "<center>Vous n'êtes pas autorisé à accéder à cette page!</center> \n";
}
voila le code complet:
<?


$host = 'localhost';
$user = 'root';
$pass = '';
$db_name = 'test';
$table_name = 'admin';

if(isset($_POST['date'])) $date = $_POST['date'];
else $date = '';
if(isset($_POST['hour'])) $hour = $_POST['hour'];
else $hour = '';
if(isset($_POST['login'])) $login = $_POST['login'];
else $login = '';
if(isset($_POST['passwd'])) $passwd = $_POST['passwd'];
else $passwd = '';

$login = strtolower(trim(htmlentities($_POST['login'], ENT_QUOTES))); 
$passwd = strtolower(trim(htmlentities($_POST['passwd'], ENT_QUOTES))); 

if ($login == ''){ //nom du champ1
echo("<font face=verdana size=2>Username field is empty</font><br>"); //message qui s'affiche si le visiteur n'a pas rempli ce champ
echo("<a href=\"javascript:history.back()\" class=navfont> Return </a>");
}

elseif ($passwd == ''){ //nom du champ1
echo("<font face=verdana size=2>Password field is empty</font><br>"); //message qui s'affiche si le visiteur n'a pas rempli ce champ
echo("<a href=\"javascript:history.back()\" class=navfont> Return </a>");
}

elseif (!session_is_registered("login") && !session_is_registered("passwd"))
{
echo "<center>Vous n'êtes pas autorisé à accéder à cette page!</center> \n";
}

else
{
$connection = mysql_connect($host, $user, $pass) or die(mysql_error());
$db = mysql_select_db($db_name, $connection) or die(mysql_error());
$sql = "SELECT * FROM admin WHERE login = '$login' AND passwd = '$passwd'";
$result = mysql_query($sql,$connection) or die(mysql_error());
//get the number of rows in the result set
$num = mysql_num_rows($result);
//print a message or redirect elsewhere, based on result
if ($num != 0) {
$_SESSION['login'] = $login;
$_SESSION['passwd'] = $passwd;

//if (session_is_registered("passe") && session_is_registered("login"))
// {
echo 'Welcome &nbsp;' .$login;
//} 
}
else 
{
echo 'Go Out';
}
}

?>

Posté : 05 sept. 2005, 13:22
par Truc
salut, essai deja en ouvrant la session, en plaçant "session_star()" tout au début de ta page (juste apres le <? )

Posté : 05 sept. 2005, 13:24
par isitien
salut, essai deja en ouvrant la session, en plaçant "session_star()" tout au début de ta page (juste apres le <? )
session_star() est deja ouverte dans index.php

Posté : 05 sept. 2005, 13:29
par Truc
tu dois le remettre sur chaque page ou tu veux utiliser les sessions

de plus tu fait les test a l'envers tu ne peux pas tester si la variable de session existe (session_is_registered("passe"))avant de l'avoir créée ($_SESSION['passwd'])!! sans dire que tu teste sur "passe" alors que tu crée "passwd"

Posté : 05 sept. 2005, 13:33
par Truc
essai comme ca:
if ($login == ''){ //nom du champ1
echo("<font face=verdana size=2>Username field is empty</font><br>"); //message qui s'affiche si le visiteur n'a pas rempli ce champ
echo("<a href=\"javascript:history.back()\" class=navfont> Return </a>");
}

elseif ($passwd == ''){ //nom du champ1
echo("<font face=verdana size=2>Password field is empty</font><br>"); //message qui s'affiche si le visiteur n'a pas rempli ce champ
echo("<a href=\"javascript:history.back()\" class=navfont> Return </a>");
}
else
{
$connection = mysql_connect($host, $user, $pass) or die(mysql_error());
$db = mysql_select_db($db_name, $connection) or die(mysql_error());
$sql = "SELECT * FROM admin WHERE login = '$login' AND passwd = '$passwd'";
$result = mysql_query($sql,$connection) or die(mysql_error());
//get the number of rows in the result set
$num = mysql_num_rows($result);
//print a message or redirect elsewhere, based on result
if ($num != 0) 
{
    $_SESSION['login'] = $login;
    $_SESSION['passwd'] = $passwd;
}

if (session_is_registered("passwd") && session_is_registered("login"))
{
      echo 'Welcome &nbsp;' .$login;
}
else
{
echo 'Go Out';
}

Posté : 05 sept. 2005, 13:54
par isitien
dans les 2 cas me donne Go Out
<?

$host = 'localhost';
$user = 'root';
$pass = '';
$db_name = 'test';
$table_name = 'admin';

if(isset($_POST['date'])) $date = $_POST['date'];
else $date = '';
if(isset($_POST['hour'])) $hour = $_POST['hour'];
else $hour = '';
if(isset($_POST['login'])) $login = $_POST['login'];
else $login = '';
if(isset($_POST['passwd'])) $passwd = $_POST['passwd'];
else $passwd = '';

$login = strtolower(trim(htmlentities($_POST['login'], ENT_QUOTES))); 
$passwd = strtolower(trim(htmlentities($_POST['passwd'], ENT_QUOTES))); 

if ($login == ''){ //nom du champ1
echo("<font face=verdana size=2>Username field is empty</font><br>"); //message qui s'affiche si le visiteur n'a pas rempli ce champ
echo("<a href=\"javascript:history.back()\" class=navfont> Return </a>");
}

elseif ($passwd == ''){ //nom du champ1
echo("<font face=verdana size=2>Password field is empty</font><br>"); //message qui s'affiche si le visiteur n'a pas rempli ce champ
echo("<a href=\"javascript:history.back()\" class=navfont> Return </a>");
}
else
{
$connection = mysql_connect($host, $user, $pass) or die(mysql_error());
$db = mysql_select_db($db_name, $connection) or die(mysql_error());
$sql = "SELECT * FROM admin WHERE login = '$login' AND passwd = '$passwd'";
$result = mysql_query($sql,$connection) or die(mysql_error());
//get the number of rows in the result set
$num = mysql_num_rows($result);
//print a message or redirect elsewhere, based on result
if ($num != 0) 
{ 
    $_SESSION['login'] = $login; 
    $_SESSION['passwd'] = $passwd; 
} 

if (session_is_registered("passwd") && session_is_registered("login")) 
{ 
      echo 'Welcome &nbsp;' .$login; 
} 
else 
{ 
echo 'Go Out'; 
} 
} 
mysql_close();
?>

Posté : 05 sept. 2005, 14:00
par Truc
j'ai un principe : mettre des echo partout ds le code pour suivre le variables...


avant le test d'existance ( if (session_is_registered...) tu va placer:
echo $login.'<br>';
echo $passwd.'<br>';
echo $_SESSION['login'].'<br>';
echo $_SESSION['passwd'].'<br>';
et dis moi ce que ça affiche.

Posté : 05 sept. 2005, 14:12
par isitien
admin
123456
admin
123456
Go Out

admin et passwd

Posté : 05 sept. 2005, 14:22
par Truc
admin
123456
admin
123456
Go Out

admin et passwd
C qoui ca "admin et passwd" ?

on va essayer autre chose (jamais utilisé session_is_registered)
remplace
if (session_is_registered("passwd") && session_is_registered("login"))

par
if (isset($_SESSION['passwd']) && isset($_SESSION['login'])

Posté : 05 sept. 2005, 14:38
par isitien
oui ca marche, je vois que session_is_registred ne marche pa, est ce que a ce nivo la partie admin est securisée, je parle pas encore de md5

Posté : 05 sept. 2005, 14:50
par Truc
je pense que oui mais n'oubli pas de "sécuriser" aussi les fichiers admin... par exemple en testant les variables de session (ds ces meme fichiers), si elles correspondent bien aux données d'un admin.

Posté : 05 sept. 2005, 15:05
par isitien
* un boutton logout aussi
<?
session_destroy();
header("location: index.php")
?>
* une fermeture de session apres (auto fermeture de session) apres X minutes
session_cache_expire (30); // 30 minutes
$cache_expire = session_cache_expire();

Posté : 05 sept. 2005, 15:07
par Truc
tout a fait :) ( tu me semble sur la bonne voie :wink: )

Posté : 05 sept. 2005, 15:10
par isitien
je pense que oui mais n'oubli pas de "sécuriser" aussi les fichiers admin... par exemple en testant les variables de session (ds ces meme fichiers), si elles correspondent bien aux données d'un admin.
securiser les fichiers admin, tu veux dire avec le 777 chmod....!!!!!!!!

Posté : 05 sept. 2005, 15:16
par Truc
euh ... non pas vraiment

je t'explique ce que j'ai fait ds mon mini site avec une demi page pr l'admin (sans grande importante de plus)... c peut etre pas la réference mais ca marche, dc:
au début d'une page php réservée a un admin je teste si une session est ouverte (isset($_SESSION...) et si la valeur de $_SESSION['droits']="admin"
si c le cas la page s'affiche sinon redirection index (ou autre)

si quelqu'un d'autre a fait autre chose ... "proposez" :D