[Sécurité] authentification php http : variables PHP_AUTH_*
Bonjour, j'ai un petit problème dans ma programmation, pourquoi ça marche pas?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
| // constantes et fonctions simples
include("info.php");
include("fct/global/redirect.php");
// classes
require_once("fct/global/user.php");
if (!isset($_SERVER["PHP_AUTH_USER"])) {
header("WWW-Authenticate: Basic realm=\"mon petit test\"");
header("HTTP/1.0 401 Unauthorized");
echo("Texte utilisé si le visiteur utilise le bouton d\'annulation");
exit;
} else {
// connexion base de données
$mysql = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PWD);
if (!$mysql) {
// connexion non effectuee
unset($_SERVER["PHP_AUTH_USER"]);
errorRedirect(5);
}
// selection de la base
if (!mysql_select_db(MYSQL_DB, $mysql)) {
// selection de db non effectué
unset($_SERVER["PHP_AUTH_USER"]);
errorRedirect(5);
}
$sql = "SELECT iduser, login, mdp, pouvoir, nom, prenom, derniereconnexion"
."FROM user WHERE login LIKE '"
.mysql_real_escape_string($_SERVER["PHP_AUTH_USER"])."';";
$result = mysql_query($sql, $mysql);
session_start();
if (!$result) {
// le login n'existe pas
unset($_SERVER["PHP_AUTH_USER"]);
errorRedirect(2);
} else {
$row = mysql_fetch_assoc($result);
if ($row["login"] == $_SERVER["PHP_AUTH_USER"] && $row["mdp"] == $_SERVER["PHP_AUTH_PW"]) {
$user = new user($row["iduser"]);
$user->setLogin($row["login"]);
$user->setPower($row["pouvoir"]);
$user->setFirstName($row["prenom"]);
$user->setLastName($row["nom"]);
$user->setLastLog(date_create());
// creation de l'objet session
$_SESSION["user"] = $user;
// insertion de la date de dernière connexion dans la bd
$sql = "UPDATE user SET derniereconnexion = "
.$user->getLastLog()
." WHERE iduser = ".$user->getIdUser().";";
if (!mysql_unbuffered_query($sql, $mysql)) {
unset($_SESSION);
session_destroy();
errorRedirect(5);
}
} else {
unset($_SERVER["PHP_AUTH_USER"]);
unset($_SESSION);
session_destroy();
errorRedirect(3);
}
}
mysql_close($mysql);
} |
le code doit être assez clair...
mon problème est le suivant: j'ai bien eu une fois la demande de mot de passe, mais lorsque je me trompe d'utilisateur/mot de passe, ça me redirige en permanence avec la fonction "errorRedirect" comme s'il gardait la variable PHP_AUTH_USER en mémoire en permanence, j'ai essayé d'utiliser unset pour la libérer mais ça ne marche pas... je ne vois pas d'info sur ce problème assez gênant dans la documentation php!
aidez moi svp