php 語法驗證 PHP使用者登入驗證模組

2021-10-22 21:28:04 字數 4193 閱讀 1956

這篇文章介紹的內容是關於php使用者登入驗證模組 ,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

實現使用者登入

>>>1 建立登入表單

登入表單的html**如下:

user login

.alert

.textinput

.btn

table

使用者名稱:

密碼:

將以上**儲存為login.php檔案並在瀏覽器中執行。

>>>2 驗證登入名和密碼

使用者在登入表單中輸入登入資訊之後,資料被提交回本頁面login.php進行處理,下面在login.php的頭部新增驗證使用者名稱和密碼是否正確的**。login.php**更改如下:<?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();

user login

<?echo $errmsg;?>

使用者名稱:

密碼:

以粗體顯示部分是新添的**,大部分語句都已有詳細注釋。值得注意的是在html表單中新增的**,其中在的第一行的單元格中加入php**用以輸 出服務 器端處理過程可能發生的錯誤或提示,另外在使用者名稱的輸入框標記的value屬性中新增了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 = "使用者名稱或密碼不正確,登入失敗!";

以上粗體部分為新添的**,**中首先從自動全域性變數$_server中獲得客戶端的ip位址,然後構造sql語句並執行該語句以更新使用者登入信 息。值得 注意的是該sql語句中對f_lasttime的賦值是通過呼叫mysql的內部函式now()來實現的,mysql的now()函式返回的是伺服器上的 當前時間。

>>>4 用session儲存使用者資訊

由於http協議的無狀態,這就使得無法在兩個不同的請求之間共享資訊,如無法記錄「當前訪問者」的資訊。雖然在登入過程已經驗證了使用者的使用者名稱與 密碼是 正確的,但是當使用者跳轉到其他頁面時,從登入頁面獲得的使用者資訊全部丟失,這是使用者不希望發生的。同時,要求使用者進入每乙個頁面時都要輸入使用者名稱與密碼進 行驗證又是不現實的,這就要求可以在不同頁面之間共享資訊。

一般來說,對於php以及其他的web程式語言,可以使用cookie或者是session來解決這個問題。

cookie是儲存在客戶端的乙個小檔案,可以將一些需要在頁面間共享的資料儲存在這個檔案中。但cookie有3個缺點:一是大小不可以超過 4kb(不 同的瀏覽器可能限制不同),二是使用者可以在瀏覽器設定中禁用cookie,三是cookie是在客戶端記錄資料安全性較差。 session一般是通過cookie來實現的,如果使用者禁用了cookie,session也同樣失效。不同於cookie的是,session 只是把 乙個資訊的標識通過cookie放在客戶端而實際的資訊卻存放在伺服器上,這樣安全效能上有較大的提高。現在也有另外一種不通過cookie而使用 session的方法,即url重寫技術。這種方法是將session的標識作為url的引數與服務進行互動,其好處是不受客戶端對cookie禁用的限 制,缺點是使用起來較為麻煩。

在php中使用session非常簡單。php提供了乙個自動全域性變數$_session用於處理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裡放置很多資料。由於這些資料直到session過期才會被釋放,因此會給伺服器帶來很大的負擔。

判斷使用者是否已登入

session_start();

if (empty($_session['uid'])) {

echo "您還沒有登入,不能訪問當前頁面!";

exit;

通過判斷自動全域性變$_session中的uid是否為空,就可以判斷使用者是否已經登入。如果使用者沒有登入,就提示其無法訪問當前頁面,並終止程式的執行(或者使用一條重定向語句將頁面導向登入頁)。

php實現登入驗證碼 php如何實現登入驗證碼

php實現登入驗證碼的方法 首先產生4到6位數的隨機驗證碼 然後把產生的每個字元儲存到session或資料庫 接著將驗證碼傳送到使用者的手機 最後將和輸入的驗證碼進行對比驗證即可。php實現簡單的驗證碼功能機制 的安全性是開發者不可忽視的乙個問題,目前使用最多的一種可以提高 安全性的方法就是使用驗證...

php 使用者登入驗證 PHP實現登入驗證碼校驗功能

驗證碼的校驗是利用php中的 session功能來實現。在最頂端宣告函式 session start 告訴伺服器我們要用這個函式的功能。session start 接下來我們用到的就是驗證碼實現的 這裡用英文數字的 為例。image imagecreatetruecolor 100,30 建立乙個1...

PHP驗證使用者登入例子 學習筆記

1.基本流程 2.uml類圖 time 下午10 13 session start validate username isset session validate username session validate username validate password isset session ...