Lorsque notre QQ se connecte depuis un autre endroit, un message de rappel s'affiche. Pour les sites Web ayant des exigences de sécurité relativement élevées, en particulier la gestion du backend, vous devez parfois vérifier si votre compte a été volé ou si une autre personne se connecte. pour le moment. Si vous n'effectuez pas d'opérations en arrière-plan, celles-ci seront très dangereuses. Afin d'empêcher deux personnes de se connecter et d'opérer en même temps, vous pouvez forcer la mise hors ligne d'un compte.
Bien sûr, il n'est pas possible de juger par IP, car l'IP changera à tout moment dans un certain segment de réseau, mais il existe un mécanisme qui peut résoudre ce problème, c'est-à-dire la session, tant que vous utilisez le même navigateur pour visiter le site Web, le navigateur ne ferme pas le session_id de chaque visiteur et reste inchangé, ce qui est exactement ce qui est nécessaire pour résoudre ce problème.
En prenant comme exemple le backend du site Web construit par le framework TP, l'idée est la suivante :
(1) Table des utilisateurs de la base de données
Dans le table utilisateur, ajoutez un champ `session_id` varchar(32)
est utilisé pour stocker le session_id après la connexion.
(2) Connexion utilisateur
La connexion utilisateur consiste à juger normalement le mot de passe du compte et le code de vérification. Une fois ceux-ci vérifiés, supprimez l'identifiant de session actuel et enregistrez-le. Dans la table des utilisateurs de la base de données.
M('user')->where(array('id'=>$_SESSION['uid']))->save(array('session_id'=>session_id()));
(3) Résolution des problèmes de connexion à distance
Pour les opérations en arrière-plan, afin de faciliter la vérification et la sécurité des opérations, Fondamentalement, créez d'abord un contrôleur de base BaseController, puis d'autres contrôleurs d'opération en arrière-plan héritent de ce contrôleur de base. Avant chaque étape de l'opération en arrière-plan, la détection du statut de l'utilisateur est placée dans la méthode d'initialisation _initialize()
du contrôleur BaseController.
Maintenant, dans la méthode _initialize()
, en plus de vérifier si le statut de connexion de l'utilisateur est verrouillé, etc., le session_id local doit être retiré et comparé au session_id stocké dans la table user si c'est le cas. ne correspond pas, alors le nom de la table compte Si vous vous connectez depuis un autre endroit, vous pouvez forcer l'utilisateur à se déconnecter et à revenir à la page de connexion.
$user = M('user')->where(array('id'=>$_SESSION['uid']))->find(); $session_id = session_id(); if($user['session_id'] != $session_id){ session_destroy(); $this->error('您的账号在其他地方登录,您已经被强制下线', U('login')); }
Bien sûr, vous pouvez également obtenir l'adresse IP pour la connexion à distance et donner un rappel :
Recommandations associées :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!