php+MySql實(shí)現(xiàn)登錄系統(tǒng)與輸出瀏覽者信息功能
本系統(tǒng),與之前在《ASP 連接Access數(shù)據(jù)庫的登陸系統(tǒng)》(點(diǎn)擊打開鏈接)一文中的asp登錄系統(tǒng)的思想完全一樣,只是編程語言從asp變成了php,數(shù)據(jù)庫從Access變成了mysql。
一、基本目標(biāo)
首先在mysql存在著如下的用戶信息表:

在頁面中有一個(gè)登錄表單,上面需要用戶填寫用戶名與密碼等信息
如果用戶輸入的用戶名在用戶信息表里面根本就沒有,那么則彈出“查無此人”的對(duì)話框,并返回本頁

如果用戶輸入的密碼錯(cuò)誤,那么則彈出“密碼錯(cuò)誤”的對(duì)話框,并返回本頁

如果用戶輸入的登錄信息正確,那么則跳到“登錄成功”的頁面,并輸出用戶當(dāng)前的IP、使用的系統(tǒng)的語言環(huán)境、與瀏覽器信息

“登錄成功”的頁面是被保護(hù)的,瀏覽器并不可以通過在瀏覽器中輸入地址的方式,繞開輸入密碼的頁面,直接訪問“登錄成功”頁面

二、基本思想

用戶輸入用戶名與密碼的那一頁用靜態(tài)頁面,只要其表單指向登錄判斷頁login.php就可以了。
welcome.php是用戶成功登錄的頁面,
exit.php用來銷毀session。
session就是用來存放用戶名與密碼的瀏覽器全局變量。
三、制作過程
(1)login.html
沒什么好說的,就一個(gè)登錄表單,見如下代碼:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>登錄頁面</title> </head> <body> <form action="login.php" method="post"> 用戶名:<input type="text" name="username" /><br /> 密碼:<input type="password" name="password" /><br /> <input type="submit" value="登錄" /> </form> </body> </html>
(2)exit.php
銷毀session頁面,并且在銷毀session之后,把頁面打回login.html
值得注意的是,在php一旦需要使用session,就應(yīng)該在所有代碼的第一行使用session_start();系統(tǒng)函數(shù),否則可能會(huì)出錯(cuò)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>登出頁面</title> </head> <body> <?php session_start(); session_destroy(); ?> <script> window.location.href="login.html"; </script> </body> </html>
(3)login.php
登錄判斷頁面,還是經(jīng)典的登錄三段論,首先接收login.html傳遞過來的username與password,查詢用戶信息表中是否有這個(gè)username,如果沒有,再登錄失敗,如果有,再同時(shí)判斷傳過來的、用戶輸入的password是否等于這個(gè)username在數(shù)據(jù)庫中對(duì)應(yīng)的dbpassword,如果是,登錄成功,并把username存入session,傳遞給登錄成功頁面,否則登錄失敗。
本頁面還用到了系統(tǒng)內(nèi)置函數(shù)is_null判斷查詢結(jié)果是否為空,如果數(shù)據(jù)庫查詢結(jié)果為空,根本就不會(huì)有值賦予給新定義的dbusername,這個(gè)dbusername依舊為空。
同時(shí),如果登錄成功之后,還要使用mt_rand(0,100000);在0~100000中產(chǎn)生一個(gè)保護(hù)登錄成功頁面的隨機(jī)數(shù)code。
并且做完一切判斷之后,記得在最后加入一條關(guān)閉數(shù)據(jù)庫的語句,人走帶門。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>登陸中……</title>
</head>
<body>
<?php
session_start();
$username=$_REQUEST["username"];
$password=$_REQUEST["password"];
$con=mysql_connect("localhost","root","root");
if(!$con){
die("數(shù)據(jù)庫連接失敗!");
}
mysql_select_db("test",$con);
$dbusername=null;
$dbpassword=null;
$result=mysql_query("select * from user where username='".$username."';");
while($row=mysql_fetch_array($result)){
$dbusername=$row["username"];
$dbpassword=$row["password"];
}
if(is_null($dbusername)){
?>
<script>
alert("查無此人!");
window.location.href="login.html";
</script>
<?php
}
else{
if($dbpassword!=$password){
?>
<script>
alert("密碼錯(cuò)誤!");
window.location.href="login.html";
</script>
<?php
}
else{
$_SESSION["username"]=$username;
$_SESSION["code"]=mt_rand(0,100000);
?>
<script>
window.location.href="welcome.php";
</script>
<?php
}
}
mysql_close($con);
?>
</body>
</html>
(4)welcome.php
在welcome.php成功登錄頁面中,先要用isset來判斷是否有l(wèi)ogin.php傳遞過來的code,這里的isset與上面is_null的區(qū)別,isset是判斷有沒有這個(gè)變量,is_null是在有這個(gè)變量的前提下,判斷這個(gè)變量是否為null,如果沒有code這個(gè)session則說明用戶非正常途徑登錄的,馬上扔到exit.php再見走人
如果是正常登錄,則通過server對(duì)象里面的各個(gè)小對(duì)象輸出用戶信息。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>歡迎登錄</title>
</head>
<body>
<?php
session_start();
if(isset($_SESSION["code"])){
?>
歡迎登錄!<?php
echo "${_SESSION["username"]}";
?><br />
你的IP:<?php
echo "${_SERVER['REMOTE_ADDR']}";
?>
<br />
你的系統(tǒng)語言:<?php
echo "${_SERVER['HTTP_ACCEPT_LANGUAGE']}";
?>
<br />
你的瀏覽器為:<?php
echo "${_SERVER['HTTP_USER_AGENT']}";
?>
<br />
<a href="exit.php">退出登錄</a>
<?php
}
else{
?>
<script>
alert("請(qǐng)正常登錄!");
window.location.href="exit.php";
</script>
<?php
}
?>
</body>
</html>
至此,整個(gè)登錄系統(tǒng)開發(fā)完成。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- php session應(yīng)用實(shí)例 登錄驗(yàn)證
- php cookie 登錄驗(yàn)證示例代碼
- php checkbox復(fù)選框值的獲取與checkbox默認(rèn)值輸出方法
- php中實(shí)現(xiàn)記住密碼自動(dòng)登錄的代碼
- 解決 phpmyadmin #2002 無法登錄 MySQL 服務(wù)器
- phpmyadmin報(bào)錯(cuò):#2003 無法登錄 MySQL服務(wù)器的解決方法
- PHP通過session id 實(shí)現(xiàn)session共享和登錄驗(yàn)證的代碼
- PHP CURL獲取cookies模擬登錄的方法
- ThinkPHP之用戶注冊(cè)登錄留言完整實(shí)例
- ThinkPHP登錄功能的實(shí)現(xiàn)方法
相關(guān)文章
學(xué)習(xí)php設(shè)計(jì)模式 php實(shí)現(xiàn)觀察者模式(Observer)
這篇文章主要介紹了php設(shè)計(jì)模式中的觀察者模式,使用php實(shí)現(xiàn)觀察者模式,感興趣的小伙伴們可以參考一下2015-12-12
詳解PHP7開啟OPcache和Swoole性能的提升對(duì)比
laravel作為最熱門的php框架之一,廣受認(rèn)可與歡迎。同時(shí)由于集成度很高,每次運(yùn)行都加載了大量文件,加之使用了大量的閉包、魔術(shù)方法,導(dǎo)致laravel框架很重,并發(fā)性能極差。OPcache和Swoole都是php的擴(kuò)展,這次旨在比較這兩個(gè)擴(kuò)展分別開啟后對(duì)Laravel應(yīng)用的加速效果。2021-05-05
PHP自定義函數(shù)實(shí)現(xiàn)assign()數(shù)組分配到模板及extract()變量分配到模板功能示例
這篇文章主要介紹了PHP自定義函數(shù)實(shí)現(xiàn)assign()數(shù)組分配到模板及extract()變量分配到模板功能,可模擬tp框架中模板變量分配功能,涉及php基于面向?qū)ο蟮臄?shù)組賦值相關(guān)操作技巧,需要的朋友可以參考下2018-05-05
PHP Header用于頁面跳轉(zhuǎn)時(shí)的幾個(gè)注意事項(xiàng)
大家都知道header函數(shù)中Location類型的標(biāo)頭是一種特殊的header調(diào)用,常用來實(shí)現(xiàn)頁面跳轉(zhuǎn),在新手剛學(xué)習(xí)的時(shí)候有些注意事項(xiàng)要注意,下面通過本文來詳細(xì)看看吧。2016-10-10
PHP對(duì)文件進(jìn)行加鎖、解鎖實(shí)例
這篇文章主要介紹了PHP對(duì)文件進(jìn)行加鎖、解鎖實(shí)例,本文直接給出實(shí)現(xiàn)代碼和代碼的使用方法,需要的朋友可以參考下2015-01-01

