php登陸頁面完整代碼 世界上最必不可少的一部分PHP實(shí)現(xiàn)(一):
2021-11-10
內(nèi)容
前言
登錄時每個WEB應(yīng)用程序中最不可缺少的部分可以用來保護(hù)資源。現(xiàn)在我們來使用世界上最好的編程語言 PHP 實(shí)現(xiàn)。
原理概述
登錄分為以下幾個部分:登錄驗(yàn)證、登錄保留、登錄和注銷
概念介紹
這是會話英語。指WEB服務(wù)發(fā)送給用戶的唯一標(biāo)識。
是服務(wù)器發(fā)送給瀏覽器的信息,由瀏覽器存儲php登陸頁面完整代碼,每次訪問一個頁面時捎帶,服務(wù)器可以讀取和判斷。
題外話——為什么我用
因?yàn)樗晕谋疚募男问酱鎯υ诜?wù)器端,所以你不怕在客戶端修改內(nèi)容。其實(shí)在服務(wù)器端文件上,PHP會自動修改文件權(quán)限,只保留系統(tǒng)讀寫權(quán)限,不能通過ftp修改,安全很多。
比如我們要驗(yàn)證用戶是否登錄,必須在里面保存用戶名和密碼(可能是md5加密后的字符串),每次請求頁面時都要驗(yàn)證。如果用戶名和密碼存儲在數(shù)據(jù)庫中,每次都必須執(zhí)行一次數(shù)據(jù)庫查詢,給數(shù)據(jù)庫造成不必要的負(fù)擔(dān)。因?yàn)槲覀儾荒苤蛔鲆淮悟?yàn)證。為什么?因?yàn)榭蛻舳酥械男畔⒖赡軙恍薷?。如果存儲變量表示用戶是否登錄,變量表示用戶是否登?strong>php登陸頁面完整代碼,變量表示用戶是否登錄,如果為真則表示登錄,如果為未登錄, $ 等于 true 后第一次認(rèn)證是的,下次就不需要驗(yàn)證了,對吧?錯誤,如果有人偽造一個值為真的 $ 變量,不是立即取得管理權(quán)嗎?很不安全。
不同的是它存儲在服務(wù)器端,遠(yuǎn)程用戶不能修改文件內(nèi)容,所以我們可以簡單地存儲一個$變量來判斷是否登錄,第一次驗(yàn)證通過后將$的值設(shè)置為true ,然后判斷該值是否為 true ,如果不是就切換到登錄界面,這樣可以減少很多數(shù)據(jù)庫操作。并且可以減少每次驗(yàn)證都需要通過密碼的不安全性(如果你沒有使用SSL安全協(xié)議,驗(yàn)證只需要通過一次)。即使密碼是md5加密的,也很容易被截獲。
當(dāng)然,使用起來也有很多優(yōu)點(diǎn),比如容易控制,用戶自定義存儲(存儲在數(shù)據(jù)庫中)。這里我就不多說了。
登錄認(rèn)證
登錄認(rèn)證是指用戶向服務(wù)器發(fā)送登錄憑據(jù),服務(wù)器驗(yàn)證登錄憑據(jù)的過程。
這部分涉及到數(shù)據(jù)庫IO。
登錄
登錄保留是指用戶在特定條件下(可以是時間或退出頁面的次數(shù))無需重新驗(yàn)證即可保持其登錄狀態(tài)的機(jī)制。
登錄和注銷
登錄和注銷是指服務(wù)器銷毀用戶,使用戶脫離登錄狀態(tài)的過程。
執(zhí)行
.php
// 表單提交后...
$posts = $_POST;
// 清除一些空白符號
foreach ($posts as $key => $value) {
$posts[$key] = trim($value);
}
$password = md5($posts["password"]);
$username = $posts["username"];
$query = "SELECT `username` FROM `user` WHERE `password` = '$password' AND `username` = '$username'";
// 取得查詢結(jié)果
$userInfo = $DB->getRow($query);
if (!empty($userInfo)) {
// 當(dāng)驗(yàn)證通過后,啟動 Session
session_start();
// 注冊登陸成功的 admin 變量,并賦值 true
$_SESSION["admin"] = true;
} else {
die("用戶名密碼錯誤");
}
?>
.php
// 防止全局變量造成安全隱患
$admin = false;
// 啟動會話,這步必不可少
session_start();
// 判斷是否登陸
if (isset($_SESSION["admin"]) && $_SESSION["admin"] === true) {
echo "您已經(jīng)成功登陸";
} else {
// 驗(yàn)證失敗,將 $_SESSION["admin"] 置為 false
$_SESSION["admin"] = false;
die("您無權(quán)訪問");
}
?>
.php
session_start();
// 這種方法是將原來注冊的某個變量銷毀
unset($_SESSION['admin']);
// 這種方法是銷毀整個 Session 文件
session_destroy();
?>