Maison >développement back-end >tutoriel php >Module de vérification de connexion utilisateur PHP
Cet article présente le module de vérification de connexion utilisateur PHP, qui a une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer
Le code HTML du formulaire de connexion est le suivant :
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>User Login</title> <style type="text/css"> <!— .alert {color: red} .textinput {width:160px} .btn {width:80px} table {border: 3px double;background-color:#eeeeee;} --> </style> </head> <body> <form name="frmLogin" method="post" action="login.php" onSubmit="return doCheck();"> <table border="0" cellpadding="8" width="350" align="center"> <tr><td colspan="2" align="center" class="alert"></td></tr> 用户名: <td><input name="username" type="text" id="username" class="textinput" /></td> </tr> <tr><td>密码:</td> <td><input name="pwd" type="password" id="password" class="textinput" /></td> </tr> <tr><td colspan="2" align="center"> <input type="submit" class="btn" value="登录"> <input type="reset" class="btn" value="重置"> </td> </tr> </form> </body> </html>Modifiez le code ci-dessus. Enregistrez-le sous le fichier login.php et exécutez-le dans le navigateur.
Les modifications du code login.php sont les suivantes :
<br/>
<?php require_once('common.php'); // 引入公共文件,其中实现了SQL注入漏洞检查的代码 $username = trim($_POST['username']); // 取得客户端提交的密码并用md5()函数时行加密转换以便后面的验证 $pwd = md5($_POST['pwd']); // 设置一个错误消息变量,以便判断是否有错误发生 // 以及在客户端显示错误消息。 其初值为空 $errmsg = ''; if (!empty($username)) { // 用户填写了数据才执行数据库操作 //--------------------------------------------------------- // 数据验证, empty()函数判断变量内容是否为空 if (empty($username)) { $errmsg = '数据输入不完整'; } //--------------------------------------------------------- if(empty($errmsg)) { // $errmsg为空说明前面的验证通过 // 调用mysqli的构造函数建立连接,同时选择使用数据库'test' $db = @new mysqli("127.0.0.1", "developer", "123456", "test"); // 检查数据库连接 if (mysqli_connect_errno()) { $errmsg = "数据库连接失败! \n"; } else { // 查询数据库,看用户名及密码是否正确 $sql = "SELECT * FROM t_user WHERE f_username='$username' AND f_password='$pwd'"; $rs = $db->query($sql); // $rs->num_rows判断上面的执行结果是否含有记录,有记录说明登录成功 if ($rs && $rs->num_rows > 0) { // 在实际应用中可以使用前面提到的重定向功能转到主页 $errmsg = "登录成功!"; } else { $errmsg = "用户名或密码不正确,登录失败!"; } // 关闭数据库连接 $db->close(); } } } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>User Login</title> <style type="text/css"> <!-- .alert {color: red} .textinput {width:160px} .btn {width:80px} table {border: 3px double;background-color:#eeeeee;} --> </style> </head> <body> <form name="frmLogin" method="post" action="login.php" onSubmit="return doCheck();"> <table border="0" cellpadding="8" width="350" align="center"> <tr><td colspan="2" align="center" class="alert"><?echo $errmsg;?></td></tr> 用户名: <td><input name="username" type="text" id="username" class="textinput" value="<?echo $username;?>" /></td> </tr> <tr><td>密码:</td> <td><input name="pwd" type="password" id="password" class="textinput" /></td> </tr> <tr><td colspan="2" align="center"> <input type="submit" class="btn" value="登录"> <input type="reset" class="btn" value="重置"> </td> </tr> </form> </body> </html>La partie affichée en gras est le code nouvellement ajouté, et la plupart des déclarations ont été commentées en détail. Il convient de noter que le code ajouté dans le formulaire HTML est ajouté à la cellule de la première ligne pour afficher les erreurs ou les invites pouvant survenir lors du traitement côté serveur. De plus, l'attribut value est marqué dans l'entrée du nom d'utilisateur. Ajout du code PHP pour afficher le dernier nom d'utilisateur soumis, de sorte que les utilisateurs qui ne peuvent pas se connecter parce qu'ils ont entré un mauvais mot de passe n'ont qu'à saisir leur mot de passe lors d'une nouvelle tentative.
Exécutez à nouveau login.php et saisissez les données dans le formulaire pour essayer de vous connecter.
Ouvrez le fichier login.php et modifiez le code PHP dans son en-tête comme suit :
<?php ...... if ($rs && $rs->num_rows > 0) { // 在实际应用中可以使用前面提到的重定向功能转到主页 第4 / 6页 $errmsg = "登录成功!"; // 更新用户登录信息 $ip = $_SERVER['REMOTE_ADDR']; // 获取客户端的IP $sql = "UPDATE t_user SET f_logintimes = f_logintimes + 1,"; $sql .= "f_lasttime=now(), f_loginip='$ip' "; $sql .= " WHERE f_username='$username'"; $db->query($sql); } else { $errmsg = "用户名或密码不正确,登录失败!"; } ...... ?>La partie en gras ci-dessus est le code nouvellement ajouté, le premier partie du code Obtenez l'adresse IP du client à partir de la variable globale automatique $_SERVER, puis construisez une instruction SQL et exécutez l'instruction pour mettre à jour les informations de connexion de l'utilisateur. Il convient de noter que l'affectation de f_lasttime dans cette instruction SQL est obtenue en appelant la fonction interne de MySQL now(). La fonction now() de MySQL renvoie l'heure actuelle sur le serveur.
En raison de la nature apatride du protocole HTTP, il est impossible de partager des informations entre deux requêtes différentes, comme par exemple l'enregistrement des informations du « visiteur actuel ». Bien que le nom d'utilisateur et le mot de passe de l'utilisateur aient été vérifiés pendant le processus de connexion, lorsque l'utilisateur accède à d'autres pages, toutes les informations utilisateur obtenues à partir de la page de connexion sont perdues, ce que l'utilisateur ne souhaite pas. Dans le même temps, il n’est pas réaliste d’exiger que les utilisateurs saisissent leur nom d’utilisateur et leur mot de passe pour vérification lorsqu’ils accèdent à chaque page, ce qui nécessite que les informations puissent être partagées entre différentes pages.
De manière générale, pour PHP et autres langages de programmation Web, vous pouvez utiliser Cookie ou Session pour résoudre ce problème.
Le cookie est un petit fichier enregistré sur le client. Certaines informations qui doivent être partagées entre les pages peuvent être stockées dans ce fichier. Cependant, les cookies présentent trois inconvénients : premièrement, la taille ne peut pas dépasser 4 Ko (les différents navigateurs peuvent avoir des restrictions différentes) ; deuxièmement, les utilisateurs peuvent désactiver les cookies dans les paramètres du navigateur ; troisièmement, les cookies enregistrent des données sur le client, ce qui est moins sécurisé. La session est généralement mise en œuvre via Cookie. Si l'utilisateur désactive Cookie, la session sera également invalide. Différent des cookies, Session met uniquement l'identification d'une information sur le client via Cookie et les informations réelles sont stockées sur le serveur, ce qui améliore considérablement les performances de sécurité. Il existe désormais une autre façon d'utiliser Session sans cookies, à savoir la technologie de réécriture d'URL. Cette méthode utilise l'identifiant de session comme paramètre de l'URL pour interagir avec le service. L'avantage est qu'elle n'est pas limitée par la désactivation du cookie du client, mais l'inconvénient est qu'elle est plus gênante à utiliser.
Utiliser Session en PHP est très simple. PHP fournit une variable globale automatique $_SESSION pour gérer la session. Cependant, il convient de noter que s'il n'y a pas de paramètre pour démarrer automatiquement la session dans le fichier de configuration PHP, vous devez appeler la fonction session_start() pour démarrer la session avant d'utiliser la session.
Ouvrez à nouveau login.php et ajoutez le code suivant en gras pour enregistrer les informations utilisateur.
<?php ...... if ($rs && $rs->num_rows > 0) { // 使用session保存当前用户 session_start(); $_SESSION['uid'] = $username; // 在实际应用中可以使用前面提到的重定向功能转到主页 $errmsg = "登录成功!"; // 更新用户登录信息 $ip = $_SERVER['REMOTE_ADDR']; // 获取客户端的IP $sql = "UPDATE t_user SET f_logintimes = f_logintimes + 1,"; $sql .= "f_lasttime=now(), f_loginip='$ip' "; $sql .= " WHERE f_username='$username'"; $db->query($sql); } ...... ?>N'abusez pas de Session. Le rôle le plus important de Session est de maintenir l'état entre les pages. Une fois que de nombreux débutants maîtrisent la technologie Session, il leur est facile d'utiliser Session comme une arme magique pour stocker des données et placer beaucoup de données dans Session. Étant donné que ces données ne seront pas publiées avant l'expiration de la session, cela imposera une charge importante au serveur.
<?php session_start(); if (empty($_SESSION['uid'])) { echo "您还没有登录,不能访问当前页面!"; exit; } ?>
通过判断自动全局变$_SESSION中的uid是否为空,就可以判断用户是否已经登录。如果用户没有登录,就提示其无法访问当前页面,并终止程序的运行(或者使用一条重定向语句将页面导向登录页)。
相关推荐:
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!