首頁  >  文章  >  後端開發  >  php產生SessionID和圖片校驗碼的想法和實現

php產生SessionID和圖片校驗碼的想法和實現

高洛峰
高洛峰原創
2016-12-02 10:22:111577瀏覽

做一個後台登陸需要用到校驗碼,前台的用戶追蹤需要用到SessionID,當然,預設的PHP開啟了Session以後就有了一個SessionID,但是我需要自己的,並且能夠存儲進數據庫,那麼我就嘗試了一下,構造了以下的函數。

/****** 產生Session ID ******/
基本的思路: 是把當前微秒的時間獲取, 然後產生以個隨機數字, 把隨機數字和當前時間相加後加密一下, 最後再截取需要的長度
/*
函數名稱:create_sess_id()
函數作用:產生以個隨機的會話ID
參數:$len: 需要會話字串的長度,預設為32位,不要低於16位元
傳回值:傳回會話ID
函數heiyeluren
*/
function create_sess_id($len=32)
{
// 校驗提交的長度是否合法
if( !is_numeric($len) || ($len>32) || ($len// 取得目前時間的微秒
list($u, $s) = explode(' ', microtime());
$time = (float)$u (float)$s ;
// 產生一個隨機數
$rand_num = rand(100000, 999999);
$rand_num = rand($rand_num, $time);
mt_srand($rand_num);
$rand_num = mt_rand(產生SessionID
$sess_id = md5( md5($time). md5($rand_num) );
// 截取指定需要長度的SessionID
$sess_id = substr($sess_id, 0, $len);
$sess_id = substr($sess_id, 0, $len);
}


/****** 產生校驗碼 ******/
思路: 這個思路比較簡單,因為考慮獨一無二和隨機性,我們的校驗碼就Session ID裡面截取一段字符串就可以了,因為我們的SessionID是充分考慮了獨一無二的。

/*
函數名稱:create_check_code()
函數作用:產生以個隨機的校驗碼
參數:$len: 需要校驗碼的長度, 請不要長於16位元,缺省為4位
返回值位元
返回值:傳回指定長度的校驗碼
函數heiyeluren
*/
function create_check_code($len=4)
{
if ( !is_numeric($len) || ($len>6) || ($len
$check_code = substr(create_sess_id(), 16, $len ); 
return strtoupper($check_code);
}


/****的PHP圖像編程的東西了,我作的圖片和簡單。

/*
函數名稱:create_check_image()
函數作用:產生一個校驗碼的圖片
參數:$check_code: 校驗碼字串,一般由create_check_code()函數來取得
傳回值:傳回該圖片
函數heiyeluren
*/
function create_check_image( $check_code )
{
// 產生圖片
$im = imagecreate(65,22); 
$black = ImageColorAllocate($im);顏色
$white = ImageColorAllocate($im, 255,255,255); // 前景顏色
$gray = ImageColorAllocate($im, 200,200,200); 
/3fill($im,68,30,0001 四位將整數驗證碼繪入圖片 
imagestring($im, 5, 8, 3, $check_code, $white);
// 加入乾擾像素 
for($i=0;$i{
$randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel($im, rand()p , rand()0 , $randcolor); 
}
/輸出圖片
Header("Content-type: image/PNG"); 
ImagePNG($im); 
ImageDestroy($im); 
}

這裡我們要注意,引用create_check_image(}

這裡我們要注意,引用create_check_image()單獨的檔案裡,因為輸出檔案頭的時候輸出的格式是影像格式,夾雜其他內容,會導致圖片無法顯示。另外,圖片成生函數,你是可以改變的,例如你想改顏色,那麼你就把前景色和背景色的生成位置換一下,那麼顏色就不一樣了,同時也要把校驗碼的顏色換了,不然背景和校驗碼都是黑色就顯示不出來了。 轉載請註明來源:php產生SessionID和圖片校驗碼的想法與實作

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn