在使用者登入時有很多種有我執行個體一樣的最基本的使用者登入跑到指定頁面這個不安全如果使用者知道你這個地址就不需要登入了,執行個體二利用了session也是較常用的在操作頁面加了session驗證,但是無法記住下次登入,執行個體三就利用了session和cookie同時登入並可以自動記錄下次自動登入功能。
我們先來看個最簡單的執行個體
以下附簡單的login.htm內容
login.php內容如下:
| 代碼如下 |
複製代碼 |
error_reporting(0); $mysql_servername = "localhost"; //主機地址 $mysql_username = "root"; //資料庫使用者名稱 $mysql_password =""; //資料庫密碼 $mysql_database ="peng"; //資料庫 mysql_connect($mysql_servername , $mysql_username , $mysql_password); mysql_select_db($mysql_database); $name=$_POST['name']; $passowrd=$_POST['password']; if ($name && $passowrd){ $sql = "SELECT * FROM liuyanban WHERE name = '$name' and password='$passowrd'"; $res = mysql_query($sql); $rows=mysql_num_rows($res); if($rows){ header("refresh:0;url=a.htm");//跳轉頁面,注意路徑 exit; } echo ""; }else { echo ""; } ?> |
下面還有一個我剛學php 是寫的
這是一個登入頁面的,其它登陸別名與密碼
php代碼
| 代碼如下 |
複製代碼 |
session_start();//這個一定要申明嘍,給個小提示:在session之前不能有任何輸出哦,在php.5以下的版本會有問題. $myname =get_value('myname',post); $mypass =get_value('mypass',post); if(!preg_match("/^w+$/",$myname) || strlen($myname)<3 || strlen($myname)>15 ){ alert('輸入的使用者名稱資訊有誤!使用者名稱必須由數字底線英語字母組成,長度為3-15個字元!',''); } if(!preg_match("/^w+$/",$mypass) || strlen($mypass)<6 || strlen($mypass)>15 ){ alert('輸和的使用者密碼!密碼必須由數字底線英語字母組成,長度為6-15個字元!',''); } $sql ="select * from tbn where admin_name='$myname' and admin_pwd='".md5($mypass)."'"; $result =mysql_query($sql); if(mysql_num_rows($result) ){ $my =mysql_fetch_array($result); $_SESSION['uid']=$myname; //$_SESSION['auth']=return_auth($my['group_id']); //這裡是因為用到使用者組取得使用者組的許可權 header("location:main.php"); }else{ alert('提示:你輸入的使用者名稱與密碼不一致!',''); } ?> |
上面的執行個體我都只儲存資訊到了session下面來看個同時應用session和cookie來儲存使用者登入資訊
1、資料庫連接裝置頁面:connectvars.php
| 代碼如下 |
複製代碼 |
//資料庫的地位 define(""DB_HOST"", ""127.0.0.1""); //使用者名稱 define(""DB_USER"", ""root""); //口令 define(""DB_PASSWORD"", ""19900101""); //資料庫名 define(""DB_NAME"",""test"") ; ?> |
2、登入頁面:logIn.php
| 代碼如下 |
複製代碼 |
//插入串連資料庫的相干資訊 require_once ""connectvars.php""; //開啟一個會話 session_start(); $error_msg = ""; //若是使用者未登入,即未設定$_SESSION[""user_id""]時,履行以下代碼 if(!isset($_SESSION[""user_id""])){ if(isset($_POST[""submit""])){//使用者提交登入表單時履行如下代碼 $dbc = mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME); $user_username = mysqli_real_escape_string($dbc,trim($_POST[""username""])); $user_password = mysqli_real_escape_string($dbc,trim($_POST[""password""])); if(!empty($user_username)&&!empty($user_password)){ //MySql中的SHA()函數用於對字串進行單向加密 $query = "SELECT user_id, username FROM mismatch_user WHERE username = ""$user_username"" AND "."password = SHA(""$user_password"")"; $data = mysqli_query($dbc,$query); //用使用者名稱和暗碼進行查詢,若查到的記錄正好為一條,則設定SESSION和COOKIE,同時進行頁面重新導向 if(mysqli_num_rows($data)==1){ $row = mysqli_fetch_array($data); $_SESSION[""user_id""]=$row[""user_id""]; $_SESSION[""username""]=$row[""username""]; setcookie(""user_id"",$row[""user_id""],time()+(60*60*24*30)); setcookie(""username"",$row[""username""],time()+(60*60*24*30)); $home_url = ""loged.php""; header(""Location: "".$home_url); }else{//若查到的記錄不合錯誤,則設定錯誤資訊 $error_msg = ""Sorry, you must enter a valid username and password to log in.""; } }else{ $error_msg = ""Sorry, you must enter a valid username and password to log in.""; } } }else{//若是使用者已經登入,則直接跳轉到已經登入頁面 $home_url = ""loged.php""; header(""Location: "".$home_url); } ?>
Mismatch - Log In Msimatch - Log In if(!isset($_SESSION[""user_id""])){ echo """".$error_msg."" ""; ?> } ?>
|
3、登入頁面:loged.php
| 代碼如下 |
複製代碼 |
//應用會話記憶體儲的變數值之前必須先開啟會話 session_start(); //若是會話沒有被設定,查看是否設定了cookie if(!isset($_SESSION[""user_id""])){ if(isset($_COOKIE[""user_id""])&&isset($_COOKIE[""username""])){ //用cookie給session賦值 $_SESSION[""user_id""]=$_COOKIE[""user_id""]; $_SESSION[""username""]=$_COOKIE[""username""]; } } //應用一個會話變數搜檢登入狀況 if(isset($_SESSION[""username""])){ echo ""You are Logged as "".$_SESSION[""username""]."" ""; echo "" Log Out("".$_SESSION[""username""]."")""; } /**在已登入頁面中,可以哄騙使用者的session如$_SESSION[""username""]、 * $_SESSION[""user_id""]對資料庫進行查詢,可以做很多多少很多多少工作*/ ?> |
4、刊出session與cookie頁面:logOut.php(刊出後重新導向到lonIn.php)
| 代碼如下 |
複製代碼 |
/**同時刊出session和cookie的頁面*/ //即使是刊出時,也必須起首開端會話才幹接見會話變數 session_start(); //應用一個會話變數搜檢登入狀況 if(isset($_SESSION[""user_id""])){ //要清除會話變數,將$_SESSION超等全域變數設定為一個空數組 $_SESSION = array(); //若是存在一個會話cookie,經由過程將到期時候設定為之前1個小時從而將其刪除 if(isset($_COOKIE[session_name()])){ setcookie(session_name(),"""",time()-3600); } //應用內建session_destroy()函數調用撤銷會話 session_destroy(); } //同時將各個cookie的到期時候設為疇昔的某個時候,使它們由體系刪除,時候以秒為單位 setcookie(""user_id"","""",time()-3600); setcookie(""username"","""",time()-3600); //location首部使瀏覽看重新導向到另一個頁面 $home_url = ""logIn.php""; header(""Location:"".$home_url); ?> |
使用者註冊登入涉及到使用者資訊與資料庫的互動,因此要特別注意使用者提交的資訊不能為非法資訊,本例中註冊部分已經使用Regex做了限制,對登入部分只簡單使用了 htmlspecialchars() 處理,實際應用時可更嚴格一些。
本教程只是簡單示範使用者註冊與登入的過程,其代碼僅供學習參考,不可直接用於項目生產。
本教程中對於使用者登入成功後採用 session 來管理,也可以採用 cookie 來管理,尤其對於有時限要求的情況。
為了提高使用者體驗,使用者註冊部分可以結合 AJAX 來檢測使用者輸入的資訊而不必等點擊提交後再檢測。
http://www.bkjia.com/PHPjc/631288.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/631288.htmlTechArticle在使用者登入時有很多種有我執行個體一樣的最基本的使用者登入跑到指定頁面這個不安全如果使用者知道你這個地址就不需要登入了,執行個體二利用了...