pb de session

Eléphanteau du PHP | 45 Messages

05 sept. 2005, 13:01

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';
}
}

?>

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

05 sept. 2005, 13:22

salut, essai deja en ouvrant la session, en plaçant "session_star()" tout au début de ta page (juste apres le <? )

Eléphanteau du PHP | 45 Messages

05 sept. 2005, 13:24

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

05 sept. 2005, 13:29

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"

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

05 sept. 2005, 13:33

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';
}

Eléphanteau du PHP | 45 Messages

05 sept. 2005, 13:54

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();
?>

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

05 sept. 2005, 14:00

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.

Eléphanteau du PHP | 45 Messages

05 sept. 2005, 14:12

admin
123456
admin
123456
Go Out

admin et passwd

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

05 sept. 2005, 14:22

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'])

Eléphanteau du PHP | 45 Messages

05 sept. 2005, 14:38

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

05 sept. 2005, 14:50

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.

Eléphanteau du PHP | 45 Messages

05 sept. 2005, 15:05

* 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();

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

05 sept. 2005, 15:07

tout a fait :) ( tu me semble sur la bonne voie :wink: )

Eléphanteau du PHP | 45 Messages

05 sept. 2005, 15:10

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....!!!!!!!!

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

05 sept. 2005, 15:16

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