PHP開發乙個完整 安全的使用者登入系統

2021-08-29 12:57:58 字數 1322 閱讀 6656

在使用php程式設計的時候,我有乙個習慣,不太喜歡使用現成的庫檔案,例如phplib或者其它類似的庫,在這個系統中,我也打算自己寫乙個庫檔案,它需要處理認證、確認email,更新帳號(密碼,email)等事情。

為了在保證該系統安全的同時,不會加重我現有資料庫的負擔。因此這個新的系統要依賴cookies。這確實是乙個兩難的選擇,因為如果只是設定乙個使用者名稱的cookie,是很不安全的,這行不通,但從資料庫的負擔考慮,我也不能加入乙個簡單的無序碼而交由我的資料庫來進行驗證。

解決的方法是同時設定兩個cookie,乙個是使用者名稱的cookie,乙個是無序碼的cookie。這個無序碼實際上是由使用者名稱和乙個超級密碼(只有程式設計者知道)組合通過md5()函式運算產生的。由於md5()是乙個單向的無序碼,因此是不可以破解的。在使用者更改email時,我也可以用該email和超級密碼產生乙個無序碼,以讓使用者確認修改。這實際上是乙個公匙/私匙類的系統。不明白?不要緊,下面再慢慢說明。

有趣的是,這個系統的擴充套件能力是可以達到無窮的,因為該系統的主要工作是計算md5()函式的值,而且由web伺服器完成,在負載增加時,可以加入其它的伺服器來分擔負載,雖然認證系統不會拖跨乙個資料庫,但是這樣做就讓最終的瓶頸只能出現在資料庫上。

以下是該庫中的兩個函式--記號產生和記號認證函式。

<?php

$hidden_hash_var='your_secret_password_here';

$logged_in=false;

unset($logged_in);

function user_isloggedin()

file://are both cookies present?

if ($user_name && $id_hash) else

} else

}function user_set_tokens($user_name_in)

$user_name=strtolower($user_name_in);

file://使用使用者名稱和超級密碼建立乙個無序碼,作判斷是否已經登入用

$id_hash= md5($user_name.$hidden_hash_var);

file://設定cookies的有效期為乙個月,可設定為任何的值

setcookie('user_name',$user_name,(time()+2592000),'/','',0);

setcookie('id_hash',$id_hash,(time()+2592000),'/','',0);

}?>

再來看另一段有趣的**,使用者怎樣才能安全地改變他們的email位址呢?他們可以在任何時候改變email位址,但是要進行確認。

乙個完整 安全的PHP使用者登入系統

在使用php 程式設計的時候,我有乙個習慣,不太喜歡使用現成的庫檔案,例如phplib或者其它類似的庫,在這個系統中,我也打算自己寫乙個庫檔案,它需要處理認證 確認email 更新帳號 密碼,email 等事情。為了在保證該系統安全的同時,不會加重我現有資料庫的負擔。因此這個新的系統要依賴cooki...

乙個完整 安全的使用者登入系統

在應用php程式設計的時候,我有乙個習慣,不太愛好應用現成的庫檔案,例如phplib或者其它類似的庫,在這個系統中,我也打算自己寫乙個庫檔案,它需要處理認證 確認email,更新帳號 密碼,email 等事情。為了在保證該系統安全的同時,不會加重我現有資料庫的累贅。因此這個新的系統要依附cookie...

乙個完整的php專案示例

在看本篇文章之前,請確保您已經完全安裝成功了php的開發環境,如有疑問,可以參考我的前一篇文章。本篇將介紹乙個php的完整示例 99pursey。首先將99pursey完整的 拷貝到伺服器根目錄下 我的根目錄是d wwwroot 各位讀者應該根據自己的根目錄的不同相應地拷貝到不同的地方。在開啟瀏覽器...