2010-10-18 3 views
1

Je n'arrive pas à concevoir un moyen de maintenir une session avec un cookie sur plusieurs pages. Je fais quelque chose de très similaire à ce tutorial. Je vérifie le mot de passe et le nom d'utilisateur d'une page d'accueil, et si c'est correct, alors je mets un cookie et le remplis avec un hash. Après cela, je transfère l'utilisateur sur une page différente. Si le nom d'utilisateur/mot de passe n'était pas correct, il redirige simplement vers la page d'accueil.Gestion d'une session sur plusieurs pages

Le principal problème que je n'arrive pas à résoudre est de savoir comment vérifier la validité du cookie sur plusieurs pages. Comme le tutoriel le suggère, je le fais en PHP. Je suppose que l'affichage du hachage à la nouvelle page n'est pas correct, mais je ne peux pas penser à un autre moyen de vérifier la validité de la session/utilisateur avant de charger la page.

Merci d'avance.

+3

Stick à '$ _SESSION', il n'y a aucune raison d'interagir directement avec les cookies pour cela. – meagar

Répondre

10

Ce tutoriel vous apprend à faire les choses d'une manière très peu sûre. Il est incroyablement mauvais de stocker des données d'authentification de ce type dans les cookies, en particulier en utilisant des noms aussi évidents que "nom d'utilisateur" et "mot de passe".

Un meilleur (et incroyablement plus sécurisé que ce que le "tutoriel" enseigne) est d'utiliser des sessions PHP régulières. PHP s'occupera de configurer le cookie de session pour vous, et tout ce que vous faites est de stocker vos données d'authentification dans la session. Ces données ne seront jamais envoyées à l'utilisateur à moins que vous ne le fassiez vous-même. La seule chose qui va et vient est le cookie de session, qui est une chaîne de poubelle aléatoire qui identifie "de manière unique" l'utilisateur à PHP.

Une fois que vous avez fait partie, alors vous mettez un petit extrait en haut de toutes les pages de connexion-requis, qui ressemble à ceci:

<?php 

session_start() 
if ($_SESSION['loggedin'] !== TRUE) { 
    header("Location: http://example.com/login.php"); 
    echo 'You must log in first'; 
    exit(); 
} 
?> 
<h1>Welcome back, <?php echo $_SESSION['username'] ?></h1> 

À moins que vous utilisez sur une PHP mal configuré, ou une version de PHP depuis l'âge de la pierre, il n'y a aucun moyen pour l'utilisateur distant de définir en quelque sorte le drapeau 'loggedin' sans passer d'abord par votre code.

+1

Rien à redire avec l'utilisation des cookies, tant que vous md5 le mot de passe avec un sel avant de le stocker. Mais vous avez raison, le tutoriel est terrible et personne ne devrait stocker des mots de passe en texte clair partout (base de données incluse). – Noodles

+0

Donc, après avoir validé le mot de passe et le nom d'utilisateur, je commence une session et charge la nouvelle page. Et lors du chargement de la nouvelle page je vérifie si la session est connectée? – Aya

+0

@aya: oui, c'est l'essentiel. Vous pouvez démarrer une session quel que soit le mode de connexion, et stocker le nombre de tentatives de connexion (facile à contourner en supprimant le cookie, mais cela pourrait arrêter les personnes moins intelligentes). Ce n'est que si la connexion est réussie que vous stockez le drapeau 'loggedin'. –