OVH Cloud OVH Cloud

Var session serialisee et authentification

2 réponses
Avatar
Zouplaz
Bonjour, en reprenant les explications d'un gentil contributeur (ici
même) j'ai fais ma sauce.

Je souhaite tout simplement vérifier qu'un utilisateur est bien
authentifié avant qu'il accède à un script (ne reprenons pas la
discussion sur les failles du procédé (récupération de la session par un
malfaisant)).

Si vous pouvez jeter un oeil rapide au code ci-dessous et me dire si
c'est bon ou si j'ai tout faux !!!

Merci

1) En début de chaque script .php **********

require_once("lib/check_session.php");

2) Dans check_session.php ******************

session_start();
$user = unserialize($_SESSION['user']);
if(!$user)
{
SS_Redirect("login.php");
}

3) Dans login.php ********************

function checkLogin()
{
$auth = new Auth();
$ret = $auth->checkLoginAndPass($_POST['LOGIN'],$_POST
['PASSWORD']);
if($ret == AUTH_OK)
{
session_start();
$user = new User($_POST['LOGIN']);
$_SESSION['user'] = serialize($user);
SS_Redirect("annuaire.php");
}
else ; // afficher msg erreur ici
}

switch (GetURLParam("ACTION"))
{
case "LOGIN" :
checkLogin();
break;
case "" :
displayForm();
break;
}

4) Dans logout.php *********************

session_start();
session_destroy();
echo "Fin de session.";

2 réponses

Avatar
Lascap
Je souhaite tout simplement vérifier qu'un utilisateur est bien
authentifié avant qu'il accède à un script


(ne reprenons pas la
discussion sur les failles du procédé (récupération de la session par un
malfaisant)).

non, vraiment pas??? allez, juste 5 minutes ;)



Si vous pouvez jeter un oeil rapide au code ci-dessous et me dire si
c'est bon ou si j'ai tout faux !!!



A priori, ça fonctionne. aux erreurs de syntaxe que je n'aurais pas vues
prets. En tout cas c'est comme ça que je procède, moi aussi (à part que je
ne serialize pas mon user, mais bon.

après, ça, là où tu mets ton message d'erreur, je te conseille fortement d'y
coller un ptit exit(), à la fin. je me suis déjà vu, à cause d'un } mal
placé, voir mon script continuer sans que je sache pourquoi.. Et d'ailleurs,
plutot que d'afficher un message d'erreur, pourquoi ne pas rediriger vers la
page de login, avec un argument genre erreur=oui , et tu écrit ton message
d'erreur sur la page de login.


sinon, encore un truc bête, je te conseille de mettre if(!isset($user))
plutot que if(!$user), ça t'évitera des "notice"

et peut etre un unset($user) avant ton session_destroy(), histoire d'etre
sûr.

voila voila.

Lascap

Avatar
Lascap
ben un notice (in english, so a notice) :) en gros c'est un "petit warning",
qui se voit lorsque tu places error_reporting = E_ALL

Lascap

"Zouplaz" a écrit dans le message de news:

Lascap - :

sinon, encore un truc b^te, je te conseille de mettre if(!isset($user))
plutot que if(!$user), ?a t',vitera des "notice"



J'ai utilisé !$user parce que la doc dit que si le unserialize ne retrouve
pas l'objet à deserialise c'est FALSE qui est retourné.
C'est quoi une notice ??

Merci pour ces infos !