12
votes

Que devrais-je stocker dans des cookies pour mettre en œuvre "mémoriser moi" lors de la connexion de l'utilisateur

J'ai un système de connexion en place pour mon site Web, les détails de l'utilisateur stocké dans la base de données sont userid (uniques pour chaque utilisateur et identifiant), adresse e-mail (unique), Nom d'affichage (pas unique), mot de passe et membres .
Maintenant, que dois-je stocker dans les cookies? Je pensais à stocker uniquement l'ID utilisateur dans le cookie avec une date d'expiration, puis si l'utilisateur revisite mon site Web après avoir enregistré un chèque pour le cookie et le connectez-le dans (quel type de ne me ressemble pas à moi) et de détruire le cookie S'il décide de se déconnecter.
* Une petite explication serait aussi très utile. Merci


2 commentaires

On dirait que vous avez déjà répondu à la question vous-même, stockez l'ID utilisateur.


Ceci n'est pas sécurisé - voir les réponses ci-dessous.


4 Réponses :


1
votes

PHP a une gestion de session intégrée qui fait exactement ce que vous recherchez:

http://us.php.net/manual/flook .session.php

Je ne recommanderais pas de stocker l'user_id dans le cookie. Au lieu de cela, vous pouvez générer un jeton unique et associer le jeton avec les utilisateurs de votre base de données et vérifier et régénérer le jeton sur chaque demande. Encore une fois, cela est un peu redondant, car la gestion de la session est déjà intégrée à PHP.


1 commentaires

Pouvez-vous donner un peu d'explication à ce sujet.



-2
votes

Ajoutez simplement le cookie expire à 2 jours ou au nombre de jours que vous souhaitez mémoriser à l'utilisateur et sauvegarder le cookie.


0 commentaires

13
votes

Vous ne pouvez jamais stocker l'ID utilisateur que dans un cookie si vous le signez avec une clé secrète que seules vos applications sait. Sinon, il est possible que l'utilisateur change de cookie à n'importe quoi et se connecter comme quelqu'un d'autre. Donc, si vous souhaitez stocker l'ID utilisateur, stockez également un hachage de l'ID utilisateur avec la clé secrète (idéalement en utilisant HMAC ) et lorsque vous souhaitez les enregistrer, calculez le même hachage et comparez-le au hachage du cookie. Une autre solution consiste à générer un jeton aléatoire, de stocker dans la base de données et d'utiliser cela dans le cookie. Si c'est assez long et assez aléatoire, il y a très peu de chance que quelqu'un devienne jeton d'une autre personne.


3 commentaires

Merci!. Mais que voulez-vous dire "ID utilisateur avec la clé secrète". Si je suis un mauvais gars et que j'en acier tout le cookie, et que cette chaîne de hachage prétend que je suis l'utilisateur connecté, le serveur peut-il savoir que je suis la mauvaise personne?


Le point de la clé secrète est de vous assurer que vous ne pouvez pas «se connecter» comme utilisateur que vous souhaitez simplement en définissant le cookie. Sans connaître la clé secrète, vous n'avez aucun moyen de construire le cookie. Si vous acierez tout le cookie pour un utilisateur existant, vous pouvez bien sûr vous connecter à cet utilisateur. Il y a quelques façons que vous puissiez faire pour empêcher que: 1) Faites expirer le cookie après un certain temps (encoder l'horodatage dans le cookie), 2) rendre le cookie spécifique à une certaine adresse IP (à nouveau, encoder l'adresse IP dans le cookie ), 3) le rendre spécifique à une certaine chaîne d'agent utilisateur (cela peut être facilement truté)


Stackoverflow.com/a/477578/2224584 - Il y en a un peu plus que cela. Voir aussi: paragonie.com / Blog / 2015/04 / ...



0
votes

php '$ _Session cela pour vous. Vous pouvez même écrire votre propre classe de session si vous aimez le contrôle total.

Un petit tutoriel est trouvé ici: http://www.tizag.com/phpt/phpsessions.php

Voici un petit exemple pour utiliser MySQL pour stocker des sessions au lieu de PHP par défaut (fichiers IN / TMP): http://www.hawkee.com/snippet/2018/


0 commentaires