国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

php生成SessionID和圖片校驗碼的思路和實現

2024-05-04 23:04:42
字體:
來源:轉載
供稿:網友
做一個后臺登陸需要用到校驗碼,前臺的用戶跟蹤需要用到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<16)) { return; }
// 獲取當前時間的微秒
 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);
 return $sess_id;
}


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

/*
函數名稱:create_check_code()
函數作用:產生以個隨機的校驗碼
參    數:$len: 需要校驗碼的長度, 請不要長于16位,缺省為4位
返 回 值:返回指定長度的校驗碼
函數作者:heiyeluren
*/
function create_check_code($len=4)
{
 if ( !is_numeric($len) || ($len>6) || ($len<1)) { return; }
  
 $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, 0,0,0);  // 背景顏色
 $white = imagecolorallocate($im, 255,255,255);  // 前景顏色
 $gray = imagecolorallocate($im, 200,200,200);
 imagefill($im,68,30,$gray);
 
 // 將四位整數驗證碼繪入圖片
 imagestring($im, 5, 8, 3, $check_code, $white);
 // 加入干擾象素
 for($i=0;$i<200;$i++)
 {
     $randcolor = imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));
     imagesetpixel($im, rand()%70 , rand()%30 , $randcolor);
 }
 // 輸出圖像
 header("content-type: image/png"); 
 imagepng($im);
 imagedestroy($im);  
}

這里我們要注意,引用create_check_image()函數的時候,必須在一個單獨的文件里,因為輸出文件頭的時候輸出的格式是圖像格式,夾雜其他內容,會導致圖片無法顯示。另外,圖片成生函數,你是可以更改的,比如你想改顏色,那么你就把前景色和背景色的生成位置換一下,那么顏色就不一樣了,同時也要把校驗碼的顏色換了,不然背景和校驗碼都是黑色就顯示不出來了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 深州市| 恩施市| 闵行区| 新乡市| 灵寿县| 义马市| 宣威市| 舒兰市| 东乌珠穆沁旗| 双柏县| 金坛市| 灵寿县| 永春县| 潜山县| 石家庄市| 德令哈市| 民县| 海原县| 彩票| 盱眙县| 泊头市| 牡丹江市| 曲阳县| 措勤县| 当阳市| 平邑县| 泸州市| 肇东市| 珠海市| 易门县| 明光市| 鲁甸县| 清镇市| 土默特右旗| 普安县| 正镶白旗| 宜兴市| 莫力| 庆元县| 黔江区| 阳原县|