為了防止各種自動登入,以及反作弊和破壞,往往會要求登入時讓使用者輸入隨機產生的驗證碼(這組驗證碼是一組數字和字母),這樣可以起到一定的防止他人利用程式讓機器自動反覆登入的情況。在php下要實現這種功能是非常的簡單。注意:產生要求修改php.inn檔案,當然要extension_dir要指向擴充套件的庫資料夾,extension=php_gd2.dll前面的分號要去掉,開啟生成功能。
---------------------------------------------檔案cookievalidate.php,登入介面
此例為cookie驗證例項
";//取乙個cookie
$validate="";
if(isset($_post["validate"]))else
}?>
檔案pic.php,生成驗證,並且將驗證內容存入cookie。只需要將這兩個php檔案存在同一目錄下,即可看見效果。
<?
header("content-type:image/png");
//定義header,宣告檔案,最好是png,無版權之擾;
$authnum ="";
//定義要顯示的數字,以從中生成新的四位整數驗證碼
$str = 'abcdefghijkmnpqrstuvwxyz1234567890';
//定義用來顯示在上的數字和字母;
$l = strlen($str); //得到字串的長度;
//迴圈隨機抽取四位前面定義的字母和數字;
for($i=1;$i<5;$i++)
setcookie ("authnum",$authnum);
//將四位數字,字母存入cookie中,名稱為authnum;
//生成驗證碼,
srand((double)microtime()*1000000);
$im = imagecreate(60,24);//寬與高;
//主要用到黑白灰三種色;
$black = imagecolorallocate($im, 0,0,0);
$white = imagecolorallocate($im, 255,255,255);
$gray = imagecolorallocate($im, 200,200,200);
//如不用干擾線,注釋就行了;
$li = imagecolorallocate($im, 120,220,200);
for($i=0;$i<3;$i++)
//將四位整數驗證碼繪入
imagefill($im,68,30,$gray);
//字元在的位置;
imagestring($im, 5, 14, 3, $authnum, $white);
for($i=0;$i<90;$i++)
imagepng($im);
imagedestroy($im);
?>
檔案sessionvalidate.php,登入介面<?php
session_start();
//在頁首先要開啟session,
//error_reporting(2047);
session_destroy();
//將session去掉,以每次都能取新的session值;
//用seesion 效果不錯,也很方便
?>
此例為session驗證例項
<?php
//列印上乙個session;
";
$validate="";
if(isset($_post["validate"]))else }
?>
檔案checknum_session.php,生成驗證,並且將驗證內容存入session。只需要將這兩個php檔案將在同一目錄下,即可看見效果。
<?
header("content-type:image/png");
//生成新的四位整數驗證碼
session_start();//開啟session;
$authnum_session = '';
$str = 'abcdefghijkmnpqrstuvwxyz1234567890';
//定義用來顯示在上的數字和字母;
$l = strlen($str); //得到字串的長度;
//迴圈隨機抽取四位前面定義的字母和數字;
for($i=1;$i<=4;$i++)
session_register("authnum_session");
//用session來做驗證也不錯;註冊session,名稱為authnum_session,
//其它頁面只要包含了該
//即可以通過$_session["authnum_session"]來呼叫
//生成驗證碼,
srand((double)microtime()*1000000);
$im = imagecreate(50,20);//寬與高;
//主要用到黑白灰三種色;
$black = imagecolorallocate($im, 0,0,0);
$white = imagecolorallocate($im, 255,255,255);
$gray = imagecolorallocate($im, 200,200,200);
//將四位整數驗證碼繪入
imagefill($im,68,30,$gray);
//如不用干擾線,注釋就行了;
$li = imagecolorallocate($im, 220,220,220);
for($i=0;$i<3;$i++)
//字元在的位置;
imagestring($im, 5, 8, 2, $authnum_session, $white);
for($i=0;$i<90;$i++)
imagepng($im);
imagedestroy($im);
?>
檔案inputvalidate.php,登入介面<?
require "validate.php";
//將驗證程式檔案呼叫進來
$randvalidate= mt_rand() ;
//隨機產生加密數字;
//將這組數字存在乙個隱藏的表單裡;
//另外這組數字用來生成驗證上的數字;
//這樣侷限就是只能產生數字驗證;
?>
此例為隱藏乙個表單來驗證的例項
<?php
$validate="";
$c_validate="";if(!empty($_post["c_validate"]))$c_validate=getvalidata($_post["c_validate"]);
//如果hidden表單裡的值不為空,$c_validate等於解密後的值;
";
if(isset($_post["validate"]))else }
?>
檔案validate.php,用來獲取加密的資料。
<?php
function getvalidata($inputvalid)
else
if($i%3==0)else
$eachnum=(int)substr($inputvalid,$i,$subleng);
$bufout .= ($setnum | $eachnum) % 10; }
//取出四位數
$long=strlen($bufout);
$setlen=$long/4;
for($i=0;$i<$long;$i++) }
return($output ); }
?>
檔案authimg.php,用來生成。
//生成驗證碼
srand((double)microtime()*1000000);
$im = imagecreate(60,25);
$black = imagecolorallocate($im, 0,0,0);
$white = imagecolorallocate($im, 255,255,255);
$gray = imagecolorallocate($im, 200,200,200);
imagefill($im,68,30,$gray);
//將四位整數驗證碼繪入
imagestring($im, 5, 14, 5,$getauthnum, $white);
for($i=0;$i<80;$i++) //加入干擾象素
imagepng($im);
imagedestroy($im);
?>
介面鑑權之cookie session和token
一 鑑權 二 引入cookie session和token的原因 目前,大部分介面使用的都是http協議,而http協議是無狀態的,即本次請求和上一次請求是沒有任何關係的,無法共享資訊。比如,像我們現在 下單需要先登入,你登入成功了之後再去下單,伺服器怎麼知道你是已登入狀態呢?三 cookie和se...
Cookie Session機制詳解
cookie通過在客戶端記錄資訊確定使用者身份,session通過在伺服器端記錄資訊確定使用者身份。cookie機制 理論上,乙個使用者的所有請求操作都應該屬於同乙個會話,而另乙個使用者的請求操作則應該屬於另乙個會話。而web應用程式是使用http協議傳輸資料的。http協議是無狀態的協議,一旦資料...
會話技術Cookie Session
1 儲存客戶端的狀態 由乙個問題引出今天的內容,例如 的購物系統,使用者將購買的商品資訊儲存到 因為http協議是無狀態的,也就是說每個客戶訪問伺服器端資源時,伺服器並不知道該客戶端是誰,所以需要會話技術識別客戶端的狀態。會話技術是幫助伺服器記住客戶端狀態 區分客戶端 2 會話技術 從開啟乙個瀏覽器...