Maison >développement back-end >tutoriel php >Le framework thinkPHP implémente un rappel de connexion à distance pour les utilisateurs

Le framework thinkPHP implémente un rappel de connexion à distance pour les utilisateurs

php中世界最好的语言
php中世界最好的语言original
2018-03-24 10:07:362106parcourir

Cette fois, je vous présente le framework thinkPHP pour réaliser le rappel de connexion à distance de l'utilisateur. Quelles sont les précautions pour que le framework thinkPHP réalise le rappel de connexion à distance de l'utilisateur. jetez un oeil.

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 est actuellement connectée et effectue des opérations backend, ce qui sera très dangereux. , 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 est le jugement normal du mot de passe du compte et du code de vérification. Lorsque toutes les vérifications réussissent, le session_id actuel est extrait et stocké dans la table utilisateur de la base de données.

M('user')->where(array('id'=>$_SESSION['uid']))->save(array('session_id'=>session_id()));

(3) Résoudre le problème de la connexion à distance

Pour les opérations en arrière-plan, afin de faciliter la vérification et la sécurité des opérations, un contrôleur de base sera essentiellement être créé en premier 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 une connexion à distance et faire un rappel :

Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article, et plus encore Comme c'est excitant, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !

Lecture recommandée :

Comment obtenir les paramètres HTTP dans Egg.js

Explication détaillée autonome du déploiement MySQLd_multi

JS obtient la valeur dans le premier élément de la liste déroulante de sélection

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn