mathieu147 Posté 23 Janvier 2008 Posté 23 Janvier 2008 Bonjour, J'ai écrit un site de vente de livres en PHP, et j'utilise les sessions pour le login de mes utilisateurs: ils ont un panneau avec les ventes en cours (pour les modifier/supprimer etc.) accessible à eux seuls. Dans chaque page qui doit être réservée aux utilisateurs enregistrés, je vérifie si la variable de session 'pseudo' est initialisée: session_start();if (!isset($_SESSION['pseudo'])) { header('Location: login.php5'); exit();} Si ce n'est pas le cas, redirection vers le formulaire de login. Après login, je vérifie si le pseudo/mot de passe existe dans la BDD. Si c'est le cas, j'initialise la variable 'pseudo' et l'utilisateur est loggué, sinon, redirection vers une page qui dit que le mot de passe est mauvais: function verification($login, $pass) { //Vérification dans la BDD [...] } session_start(); if (isset($_POST['pseudo']) && isset($_POST['motdepasse'])) { $pseudo = $_POST['pseudo']; $motdepasse = $_POST['motdepasse']; if (verification($pseudo, $motdepasse)) { //On change d'identifiant de session session_regenerate_id(); //On sauvegarde le pseudo dans l'identifiant de session $_SESSION['pseudo'] = $pseudo; $page = "index.php5"; } else { $page = "authfail.php5"; } }[...]echo "<meta http-equiv=\"refresh\" content=\"0; url=$page\">";[...] Ça fonctionne bien chez moi et chez la plupart de mes utilisateurs (différents OS et navigateurs), mais chez certain, il y a un problème: ils ne peuvent pas accéder aux pages privées: leur mot de passe est demandé à chaque fois, même quand il est bon. Quand il est faux, la page "mauvais mot de passe" est bien affichée. Qu'est-ce qui peut bien poser problème?? Pourquoi est-ce que ça fonctionne chez certains et pas chez d'autres? Il me semble que les sessions, c'est côté serveur, donc si ça marche pour un, ça devrait marcher pour tous, non? Un grand merci d'avance!
mohican83 Posté 23 Janvier 2008 Posté 23 Janvier 2008 Salut, Tout d'abord, pourquoi ne pas faire un header Location au lieu du refresh? @+
mathieu147 Posté 23 Janvier 2008 Auteur Posté 23 Janvier 2008 Bonne question Mais ça ne résoudrait pas mon problème, si??
mohican83 Posté 28 Janvier 2008 Posté 28 Janvier 2008 Salut, Déjà, mets le session_start() toujours en premier sur ta page. Ensuite, pour la redirection si pas loggé, vérifie que $_SESSION['pseudo'] n'est pas vide. Si le login + mdp est bon, tu rediriges sur index.php5 -> ça correspond à quelle page? @+
Dan Posté 28 Janvier 2008 Posté 28 Janvier 2008 Je ne comprends pas la raison de l'appel à session_regenerate_id() ??? Pour quelle raison veux-tu changer l'id de session ?
Kioob Posté 28 Janvier 2008 Posté 28 Janvier 2008 (modifié) Dan : c'est une méthode de sécurité de plus en plus répandue ; même si pour ma part je la trouve totalement bidon. Le principe est le suivant : à chaque page l'internaute/membre change d'ID de session, il est donc plus difficile pour un pirate de voler la session courante. Sur le principe, je suis 100% d'accord, la fenêtre de "vol" passe de 30 minutes à 2 minutes environ. Sauf que : *) pour cela il faut passer le paramètre "true" à session_regenerate_id, sinon l'ancienne session n'est pas désactivée ; ce qui veut dire qu'au lieu de limiter les risques de vol de session, tu les augmentes très très fortement. *) ça ne fonctionne pas si bien que ça, la plupart des navigateurs peuvent gèrer plusieurs connexions simultanément, et lorsque la requete A reçoit le nouvel ID de session il est parfois trop tard car la requete B est déjà "partie". Cette fameuse requete B n'a donc pas le bon ID de session et l'internaute (pourtant légitime) se fait déconnecter. C'est particulièrement vrai dès lors qu'on utilise les sessions dans des fichiers "externes" à la page (images, CSS, JS, tag de stats, frames, etc) ; ou tout simplement en cas de redirection (la fameuse redirection 301/302, dont beaucoup de navigateurs ignorent le dépot de cookie). Pour ma part pour vraiment sécuriser cela j'utilise le système de "double ID", qui a au moins l'avantage de ne pas avoir ce genre d'effet de bords. Modifié 28 Janvier 2008 par Kioob
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant