2010-04-28 57 views
0

J'utilise Symfony 1.4 avec Doctrine.Problème avec sfRembourrer cookie/sfGuard Se souvenir de moi

Désolé, c'est une question idiote, mais qu'est-ce que vous avez besoin de faire en plus de sfDoctrineGuardPlugin pour que la fonctionnalité "remember me" fonctionne? Lorsque je me connecte à un utilisateur, le cookie sfRemember est créé avec la durée de vie par défaut de 15 jours, et la clé de rappel est enregistrée dans la table sf_guard_remember_key du plugin.

Sans modifications du plugin, la méthode sfGuardSecurityUser SignIn() crée le cookie, mais la méthode Signout() l'efface, ne laissant aucun cookie sauf si vous êtes connecté!

Signin(): 
sfContext::getInstance()->getResponse()->setCookie($remember_cookie, $key, time() + $expiration_age); 

Signout(): 
sfContext::getInstance()->getResponse()->setCookie($remember_cookie, '', time() - $expiration_age); 

Je peux voir que la table de base de données enregistre le cookie en tant que relation de sf_guard_user, mais ce n'est pas grand-chose si le cookie est parti ....

Je serais reconnaissant si quelqu'un pouvait dire moi ce qui me manque ici, et idéalement, si j'empêche la méthode Signout() de supprimer le cookie, ai-je besoin d'écrire du code pour lire le cookie moi-même ou est-ce automatisé quelque part/en quelque sorte? J'ai les installations Symfony 1.4 et sfDoctrineGuardPlugin standard.

Tout semble tout à fait faux et la documentation à ce sujet est inexistante.

Toute aide aurait apprécié. Pourquoi voudriez-vous conserver le cookie de rappel après que l'utilisateur se soit déconnecté?

Répondre

2

Son seul but est de garder l'utilisateur connecté, même après que sa session en cours a expiré - d'où le cookie. Cela signifie que s'il ferme le navigateur (et que le cookie de session est supprimé), il se connectera automatiquement avec le cookie de rappel la prochaine fois qu'il visitera le site. Mais s'il se déconnecte, nous voulons le déconnecter complètement - c'est pourquoi il est nécessaire de vider le cookie.

+0

@Maerlyn: J'avais l'impression que la fonctionnalité était liée à la facilité de connexion lors de la prochaine visite de l'utilisateur (si elle se situe dans la période d'expiration du cookie) en conservant le nom d'utilisateur et/ou le mot de passe. enregistre déjà un autre cookie appelé "symfony". Désolé d'être pédant mais es-tu sûr que c'est comme tu dis? – Tom

+0

Hmm .... ça devient clair. Je suppose que c'est une façon de le faire. Je l'ai maintenant, merci. – Tom

+0

@Tom: Oui, j'en suis sûr. Il existe deux types de cookies: les cookies de session (qui sont supprimés lorsque vous fermez le navigateur) et les cookies réguliers, qui ont une date d'expiration (à savoir le supprimer le 2010-04-30 12:34 UTC). La première est utilisée lorsque vous utilisez la superglobale simple plp $ _SESSION et les autres fonctions de gestion de sesion. C'est que vous pouvez accéder via une instance de sfUser. La fonction régulière est utilisée pour la fonction de rappel car elle n'est pas supprimée lors de la fermeture de la fenêtre. Il est toujours nécessaire de le supprimer lorsque l'utilisateur souhaite se déconnecter. – Maerlyn