PHP 사용자 로그인 확인 모듈

不言
풀어 주다: 2023-03-24 19:10:02
원래의
22422명이 탐색했습니다.

이 글에서는 특정 참고 가치가 있는 PHP 사용자 로그인 인증 모듈을 소개합니다. 이제 모든 사람과 공유합니다. 도움이 필요한 친구들이 참고할 수 있습니다.

사용자 로그인 실현

>>>1 로그인 양식 만들기

로그인 폼의 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/>

>>>2 로그인 이름과 비밀번호 확인

사용자가 로그인 양식에 로그인 정보를 입력한 후 처리를 위해 데이터가 이 페이지 login.php로 다시 제출됩니다. login.php의 헤더 사용자 이름과 비밀번호가 올바른지 여부를 나타내는 코드입니다. login.php 코드 변경 사항은 다음과 같습니다.

<br/>
로그인 후 복사
<?php
require_once(&#39;common.php&#39;); // 引入公共文件,其中实现了SQL注入漏洞检查的代码 $username = trim($_POST[&#39;username&#39;]);
// 取得客户端提交的密码并用md5()函数时行加密转换以便后面的验证
$pwd = md5($_POST[&#39;pwd&#39;]);
// 设置一个错误消息变量,以便判断是否有错误发生
// 以及在客户端显示错误消息。 其初值为空
$errmsg = &#39;&#39;;
if (!empty($username)) { // 用户填写了数据才执行数据库操作
//---------------------------------------------------------
// 数据验证, empty()函数判断变量内容是否为空
if (empty($username)) {
$errmsg = &#39;数据输入不完整&#39;;
}
//---------------------------------------------------------
if(empty($errmsg)) { // $errmsg为空说明前面的验证通过
// 调用mysqli的构造函数建立连接,同时选择使用数据库&#39;test&#39;
$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=&#39;$username&#39; AND f_password=&#39;$pwd&#39;";
$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/>

>>>3 사용자 로그인 정보 업데이트

사용자 정보 테이블 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[&#39;REMOTE_ADDR&#39;]; // 获取客户端的IP
$sql = "UPDATE t_user SET f_logintimes = f_logintimes + 1,";
$sql .= "f_lasttime=now(), f_loginip=&#39;$ip&#39; ";
$sql .= " WHERE f_username=&#39;$username&#39;";
$db->query($sql);
}
else {
$errmsg = "用户名或密码不正确,登录失败!";
}
......
?>
로그인 후 복사

위의 굵은 부분은 새로 추가된 코드이며, 클라이언트의 IP 주소는 자동 전역 변수에서 먼저 가져옵니다. $_SERVER, SQL 문을 구성하고 해당 문을 실행하여 사용자 로그인 정보를 업데이트합니다. 이 SQL 문에서 f_lasttime 할당은 MySQL의 내부 함수 now()를 호출하여 수행된다는 점은 주목할 가치가 있습니다. MySQL의 now() 함수는 서버의 현재 시간을 반환합니다. <br/>

>>>4 세션을 사용하여 사용자 정보 저장

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[&#39;uid&#39;] = $username;

// 在实际应用中可以使用前面提到的重定向功能转到主页
$errmsg = "登录成功!";

// 更新用户登录信息
$ip = $_SERVER[&#39;REMOTE_ADDR&#39;]; // 获取客户端的IP
$sql = "UPDATE t_user SET f_logintimes = f_logintimes + 1,";
$sql .= "f_lasttime=now(), f_loginip=&#39;$ip&#39; ";
$sql .= " WHERE f_username=&#39;$username&#39;";
$db->query($sql);
}
......
?>
로그인 후 복사

세션을 남용하지 마세요. 세션의 가장 큰 역할은 페이지 간 상태를 유지하는 것입니다. 많은 초보자들이 Session 기술을 익힌 후에는 Session을 데이터 저장의 마법 무기로 사용하고 많은 데이터를 Session에 배치하기가 쉽습니다. 이 데이터는 Session이 만료될 때까지 공개되지 않으므로 서버에 많은 부담을 주게 됩니다. <br/>

사용자의 로그인 여부 확인

이전 섹션에서 사용자 이름을 Session에 저장하는 작업을 완료했기 때문에 사용자의 로그인 여부를 확인하는 것은 매우 간단합니다. 코드는 다음과 같습니다. <br/>

<?php
session_start();
if (empty($_SESSION[&#39;uid&#39;])) {
echo "您还没有登录,不能访问当前页面!";
exit;
}
?>
로그인 후 복사

通过判断自动全局变$_SESSION中的uid是否为空,就可以判断用户是否已经登录。如果用户没有登录,就提示其无法访问当前页面,并终止程序的运行(或者使用一条重定向语句将页面导向登录页)。

相关推荐:

php用户注册时密码使用crypt加密示例

위 내용은 PHP 사용자 로그인 확인 모듈의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿