2011-09-22 5 views
1

J'essaie d'interdire plusieurs connexions par le même utilisateur en même temps sur mon site piloté par CakePHP (1.2). Cependant, ce n'est pas aussi simple que je le pensais puisque je n'ai aucune idée de comment obtenir l'information si un utilisateur est déjà connecté ou non. J'utilise le composant Auth de Cake pour authentifier les utilisateurs. Les sessions sont gérées par l'installation php et php stocke les données de session dans des fichiers. Donc, je suppose qu'il n'est pas possible d'accéder aux données de session à partir d'un contrôleur (car, bien sûr, ces fichiers ne sont pas sauvegardés dans le webroot). J'ai pensé à vérifier si un utilisateur est connecté ou non en utilisant un champ de base de données spécial mais il n'y a aucun moyen de savoir si un utilisateur est déconnecté ou non s'il n'utilise pas la méthode de déconnexion, mais ferme simplement son navigateur et Ainsi se termine la session.CakePHP: Vérifiez si l'utilisateur est déjà connecté

Quelqu'un peut-il penser à une autre façon de gérer cela? Je n'ai pas besoin de connaître toutes les données sur chaque utilisateur connecté. La seule chose que je dois savoir est si le nom d'utilisateur donné est connecté pour le moment.

Merci d'avance.

Répondre

3

Je pense CakePHP aura automatiquement ce comportement si vous définissez Security.level-high dans votre fichier de configuration de base, comme regénère la session ID à chaque fois.

Configure::write('Security.level', 'high'); 

Sinon, la logique sous-jacente est que vous pouvez enregistrer un hachage des utilisateurs de l'Agent IP/utilisateur dans la table utilisateur lors de leur connexion, et si un ordinateur avec un hachage différent de celui que vous avez enregistré essais Pour faire quelque chose, déconnectez l'utilisateur. De cette façon, seul le dernier utilisateur fonctionnera.

+0

Hé, bat moi à ça. Lorsqu'il est réglé sur haut, CakePHP vérifie déjà l'agent utilisateur (il le hache et le stocke dans le fichier de session, donc pas besoin d'un champ de base de données). Certains utilisateurs sont derrière des serveurs proxy qui utilisent un pool d'adresses IP publiques, donc je ne vérifierais pas les changements d'adresse IP. – deizel

+0

Oh, j'ai oublié de +1. – deizel

+0

Cela semble très bien. Mais la régénération de l'ID de session semble avoir l'effet secondaire que les utilisateurs connectés sont déconnectés au hasard. Au moins, cela ne se produit pas lorsque le niveau security.level est défini sur "medium". Est-ce que je fais quelque chose de mal? – j0ker

Questions connexes