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

phpsession 실패 이유에는 구성 오류, 쿠키 문제 및 세션 만료가 포함됩니다. 1. 구성 오류 : 올바른 세션을 확인하고 설정합니다. 2. 쿠키 문제 : 쿠키가 올바르게 설정되어 있는지 확인하십시오. 3. 세션 만료 : 세션 시간을 연장하기 위해 세션을 조정합니다 .GC_MAXLIFETIME 값을 조정하십시오.

PHP에서 세션 문제를 디버그하는 방법 : 1. 세션이 올바르게 시작되었는지 확인하십시오. 2. 세션 ID의 전달을 확인하십시오. 3. 세션 데이터의 저장 및 읽기를 확인하십시오. 4. 서버 구성을 확인하십시오. 세션 ID 및 데이터를 출력, 세션 파일 컨텐츠보기 등을 통해 세션 관련 문제를 효과적으로 진단하고 해결할 수 있습니다.

Session_Start ()로 여러 통화를하면 경고 메시지와 가능한 데이터 덮어 쓰기가 발생합니다. 1) PHP는 세션이 시작되었다는 경고를 발행합니다. 2) 세션 데이터의 예상치 못한 덮어 쓰기를 유발할 수 있습니다. 3) Session_status ()를 사용하여 반복 통화를 피하기 위해 세션 상태를 확인하십시오.

SESSION.GC_MAXLIFETIME 및 SESSION.COOKIE_LIFETIME을 설정하여 PHP에서 세션 수명을 구성 할 수 있습니다. 1) SESSION.GC_MAXLIFETIME 서버 측 세션 데이터의 생존 시간을 제어합니다. 2) 세션 .Cookie_Lifetime 클라이언트 쿠키의 수명주기를 제어합니다. 0으로 설정하면 브라우저가 닫히면 쿠키가 만료됩니다.

데이터베이스 스토리지 세션 사용의 주요 장점에는 지속성, 확장 성 및 보안이 포함됩니다. 1. 지속성 : 서버가 다시 시작 되더라도 세션 데이터는 변경되지 않아도됩니다. 2. 확장 성 : 분산 시스템에 적용하여 세션 데이터가 여러 서버간에 동기화되도록합니다. 3. 보안 : 데이터베이스는 민감한 정보를 보호하기 위해 암호화 된 스토리지를 제공합니다.

SessionHandlerInterface 인터페이스를 구현하여 PHP에서 사용자 정의 세션 처리 구현을 수행 할 수 있습니다. 특정 단계에는 다음이 포함됩니다. 1) CustomsessionHandler와 같은 SessionHandlerInterface를 구현하는 클래스 만들기; 2) 인터페이스의 방법 (예 : Open, Close, Read, Write, Despare, GC)의 수명주기 및 세션 데이터의 저장 방법을 정의하기 위해 방법을 다시 작성합니다. 3) PHP 스크립트에 사용자 정의 세션 프로세서를 등록하고 세션을 시작하십시오. 이를 통해 MySQL 및 Redis와 같은 미디어에 데이터를 저장하여 성능, 보안 및 확장 성을 향상시킬 수 있습니다.

SessionId는 웹 애플리케이션에 사용되는 메커니즘으로 사용자 세션 상태를 추적합니다. 1. 사용자와 서버 간의 여러 상호 작용 중에 사용자의 신원 정보를 유지하는 데 사용되는 무작위로 생성 된 문자열입니다. 2. 서버는 쿠키 또는 URL 매개 변수를 통해 클라이언트로 생성하여 보낸다. 3. 생성은 일반적으로 임의의 알고리즘을 사용하여 독창성과 예측 불가능 성을 보장합니다. 4. 실제 개발에서 Redis와 같은 메모리 내 데이터베이스를 사용하여 세션 데이터를 저장하여 성능 및 보안을 향상시킬 수 있습니다.

JWT 또는 쿠키를 사용하여 API와 같은 무국적 환경에서 세션을 관리 할 수 있습니다. 1. JWT는 무국적자 및 확장 성에 적합하지만 빅 데이터와 관련하여 크기가 크다. 2. 쿠키는보다 전통적이고 구현하기 쉽지만 보안을 보장하기 위해주의해서 구성해야합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.
