이 글에서는 특정 참고 가치가 있는 PHP 사용자 로그인 인증 모듈을 소개합니다. 이제 모든 사람과 공유합니다. 도움이 필요한 친구들이 참고할 수 있습니다.
로그인 폼의 HTML 코드는 다음과 같습니다.
<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>
위 코드를 login.php 파일로 저장하고 브라우저에서 실행해 보세요. <br/>
사용자가 로그인 양식에 로그인 정보를 입력한 후 처리를 위해 데이터가 이 페이지 login.php로 다시 제출됩니다. login.php의 헤더 사용자 이름과 비밀번호가 올바른지 여부를 나타내는 코드입니다. login.php 코드 변경 사항은 다음과 같습니다.
<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>
굵게 표시된 부분은 새로 추가된 코드이며, 대부분의 구문에 대해 자세히 주석을 달았습니다. HTML 형식에 추가된 코드는 주목할 만합니다. 서버측 처리 중에 발생할 수 있는 오류나 프롬프트를 출력하기 위해 첫 번째 행의 셀에 PHP 코드가 추가됩니다. 또한 사용자 이름 입력에 값 속성이 표시됩니다. 상자. 마지막으로 제출한 사용자 이름을 출력하는 PHP 코드를 추가하여 잘못된 비밀번호를 입력하여 로그인할 수 없는 사용자는 다시 시도할 때 비밀번호만 입력하면 됩니다. <br/>login.php를 다시 실행하고 양식에 데이터를 입력하여 로그인을 시도합니다. <br/>
사용자 정보 테이블 t_user에서 f_logintimes 필드는 사용자의 로그인 시간을 기록하는 데 사용되고, f_lasttime 필드는 사용자의 마지막 로그인 시간을 기록하는 데 사용되며, f_login 필드는 사용자를 기록하는 데 사용됩니다. 마지막 로그인에 사용된 IP는 주로 사용자 로그인 횟수 및 사용자의 지리적 분포를 계산하는 편의를 제공하기 위해 이 정보를 데이터베이스에 기록합니다. 이러한 데이터는 사용자가 로그인할 때마다 업데이트되어야 합니다. 다음으로 이러한 데이터를 업데이트하는 코드를 추가합니다. <br/>login.php 파일을 열고 헤더의 PHP 코드를 다음과 같이 변경합니다. <br/>
<?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 = "用户名或密码不正确,登录失败!"; } ...... ?>
위의 굵은 부분은 새로 추가된 코드이며, 클라이언트의 IP 주소는 자동 전역 변수에서 먼저 가져옵니다. $_SERVER, SQL 문을 구성하고 해당 문을 실행하여 사용자 로그인 정보를 업데이트합니다. 이 SQL 문에서 f_lasttime 할당은 MySQL의 내부 함수 now()를 호출하여 수행된다는 점은 주목할 가치가 있습니다. MySQL의 now() 함수는 서버의 현재 시간을 반환합니다. <br/>
HTTP 프로토콜은 상태 비저장입니다. 그것이 하는 일은 단순히 서버에 요청을 보내고 서버에서 데이터를 얻는 것뿐입니다. 다른 것은 아무것도 모릅니다. 동일한 PHP 파일이 두 번 요청되더라도 두 요청 사이에 연결이 있다고 생각하지 않습니다. <br/>HTTP 프로토콜의 상태 비저장 특성으로 인해 "현재 방문자" 정보 기록과 같은 서로 다른 두 요청 간에 정보를 공유하는 것은 불가능합니다. 로그인 과정에서 사용자의 사용자 이름과 비밀번호가 올바른지 확인되었음에도 불구하고 사용자가 다른 페이지로 이동할 때 로그인 페이지에서 얻은 모든 사용자 정보가 손실되는 것은 사용자가 원하지 않는 일입니다. 동시에, 사용자가 각 페이지에 들어갈 때 확인을 위해 사용자 이름과 비밀번호를 입력하도록 요구하는 것은 비현실적이며, 이로 인해 서로 다른 페이지 간에 정보가 공유될 수 있습니다. <br/>일반적으로 PHP 및 기타 웹 프로그래밍 언어의 경우 쿠키나 세션을 사용하여 이 문제를 해결할 수 있습니다. <br/>쿠키는 클라이언트에 저장되는 작은 파일입니다. 페이지 간에 공유해야 하는 일부 정보가 이 파일에 저장될 수 있습니다. 그러나 쿠키에는 세 가지 단점이 있습니다. 첫째, 크기는 4KB를 초과할 수 없습니다(브라우저마다 제한 사항이 다를 수 있음). 둘째, 사용자는 브라우저 설정에서 쿠키를 비활성화할 수 있습니다. 셋째, 쿠키는 클라이언트에 데이터를 기록하므로 보안이 취약합니다. 세션은 일반적으로 쿠키를 통해 구현됩니다. 사용자가 쿠키를 비활성화하면 세션도 무효화됩니다. 쿠키와 달리 세션은 쿠키를 통해 클라이언트에 정보를 식별할 뿐 실제 정보는 서버에 저장되므로 보안 성능이 크게 향상됩니다. 이제 쿠키 없이 Session을 사용할 수 있는 또 다른 방법, 즉 URL 재작성 기술이 있습니다. 이 방법은 서비스와 상호 작용하기 위해 세션 식별자를 URL의 매개 변수로 사용합니다. 장점은 클라이언트의 쿠키 비활성화로 인해 제한되지 않는다는 점이지만, 사용하기가 더 번거롭다는 단점이 있습니다. <br/>PHP에서 세션을 사용하는 것은 매우 간단합니다. PHP는 세션 처리를 위해 자동 전역 변수 $_SESSION을 제공합니다. 단, PHP 구성 파일에 Session을 자동으로 시작하는 설정이 없으면 Session을 사용하기 전에 session_start() 함수를 호출하여 Session을 시작해야 한다는 점에 유의해야 한다. <br/>login.php를 다시 열고 다음 코드를 굵게 추가하여 사용자 정보를 기록합니다. <br/>
<?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); } ...... ?>
세션을 남용하지 마세요. 세션의 가장 큰 역할은 페이지 간 상태를 유지하는 것입니다. 많은 초보자들이 Session 기술을 익힌 후에는 Session을 데이터 저장의 마법 무기로 사용하고 많은 데이터를 Session에 배치하기가 쉽습니다. 이 데이터는 Session이 만료될 때까지 공개되지 않으므로 서버에 많은 부담을 주게 됩니다. <br/>
이전 섹션에서 사용자 이름을 Session에 저장하는 작업을 완료했기 때문에 사용자의 로그인 여부를 확인하는 것은 매우 간단합니다. 코드는 다음과 같습니다. <br/>
<?php session_start(); if (empty($_SESSION['uid'])) { echo "您还没有登录,不能访问当前页面!"; exit; } ?>
通过判断自动全局变$_SESSION中的uid是否为空,就可以判断用户是否已经登录。如果用户没有登录,就提示其无法访问当前页面,并终止程序的运行(或者使用一条重定向语句将页面导向登录页)。
相关推荐:
위 내용은 PHP 사용자 로그인 확인 모듈의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!