2009-09-11 7 views
11

Quelle est la meilleure chose à stocker dans un cookie pour garder un état connecté persistant?Que devrait être stocké dans un cookie pour un système de connexion?

J'ai vu de nombreux sites Web (et des tutoriels pour débutants!) Qui stockent simplement quelque chose comme validUser = 1 dans un cookie. Clairement, je pourrais usurper cela et le site web penserait que j'étais un utilisateur valide.

Si le nom d'utilisateur est stocké dans le cookie, je pourrais me faire passer pour n'importe quel utilisateur en envoyant un cookie avec son nom d'utilisateur dans ma demande. Donc, si vous stockez le nom d'utilisateur et mot de passe dans le cookie, alors je dois connaître le nom d'utilisateur et mot de passe pour se connecter. Effectivement l'utilisateur est connecté automatiquement - c'est comme avoir le mot de passe enregistré par son navigateur. Au lieu d'avoir à taper les informations d'identification dans les boîtes à chaque fois, le navigateur les envoie automatiquement à chaque demande de page.

Mais est-ce encore une mauvaise idée? Stocker un mot de passe en texte brut n'est pas une idée géniale, mais c'est comme ça qu'il serait envoyé dans les données POST lors de la connexion. Et d'ailleurs, il pourrait être stocké en hachage. Mais je ne me sens toujours pas à l'aise avec ça.

Il se peut que les cookies ne soient pas utilisés pour stocker autre chose qu'un ID de session et que les données utilisateur soient stockées sur le serveur lui-même. C'est peut-être un endroit plus sûr, supposant que le serveur n'est pas partagé. En regardant certains logiciels open source tels que les logiciels de forum, ils utilisent un système plus compliqué, mais je ne pouvais pas comprendre exactement ce qu'il faisait en parcourant le code.

Quelle est la «meilleure pratique» standard?

+1

Alors est-ce aussi simple que de stocker un identifiant d'utilisateur dans la session? C'est sûr, et pas besoin de stocker plus d'informations sur un login particulier dans la base de données? (par exemple IP), et de changer toutes les session/données à chaque fois qu'ils reviennent, comme j'ai vu ces grands scripts faire? – Rob

+0

Dans la mesure du possible, vous devriez réutiliser un cadre d'authentification existant car, en réalité, c'est complexe. Par exemple, jetez un oeil à https://github.com/delight-im/PHP-Auth – caw

Répondre

6
+0

Le deuxième lien est maintenant cassé. –

+0

@DrTwox C'est maintenant. –

+6

Les réponses contenant uniquement des liens ne sont pas de bonnes réponses. Cette réponse doit être modifiée pour inclure un résumé des articles liés. (Oui, je sais que c'est une très vieille réponse déjà.Cependant, le commentaire sur un lien brisé illustre parfaitement la nécessité de résumer les liens.) –

3

meilleure pratique serait d'utiliser un SESSION au lieu d'un COOKIE pour les données d'utilisation. Les COOKIES sont utilisés pour stocker des informations génériques et non des informations spécifiques sur un utilisateur, c'est à cela que servent les SESSIONS.

0

La meilleure pratique consiste à stocker un ID de session généré de manière aléatoire. La session stocke alors l'identifiant de l'utilisateur ou tout ce dont vous avez besoin pour le stocker. En PHP, la méthode session_start() génère automatiquement l'identifiant de session et un cookie nommé PHPSESSID, vous n'avez donc qu'à vous soucier de stocker des données dans le tableau $ _SESSION, pas dans le cookie.

0

La seule chose qui devrait être dans un cookie est le sessionid généré par PHP (et ceci est fait automatiquement lorsque vous utilisez des sessions). Vous ne devriez rien stocker dans le cookie, sauf peut-être un nom d'utilisateur mémorisé dans le but d'une case à cocher "se souvenir de moi".

Questions connexes