ホームページ  >  記事  >  バックエンド開発  >  SessionIDと画像検証コードを生成するPHPのアイデアと実装

SessionIDと画像検証コードを生成するPHPのアイデアと実装

高洛峰
高洛峰オリジナル
2016-12-02 10:22:111577ブラウズ

バックエンドのログインには確認コードが必要で、フロントエンドでのユーザー追跡にはセッションIDが必要です。もちろん、デフォルトのPHPにはセッションを開いた後にセッションIDが含まれますが、独自のセッションIDが必要であり、データベースに保存できます。試しに以下の関数を作成してみました。

/****** セッション ID の生成 ******/
基本的なアイデアは、現在のマイクロ秒時間を取得し、次に乱数を生成し、その乱数を現在の時間に追加して暗号化し、最後に必要な長さをインターセプトすることです
/*
関数名: create_sess_id()
関数関数: ランダムなセッション ID を生成します
パラメーター: $len: セッション文字列の長さは必須です。デフォルトは 32 ビットで、16 ビット以上です
戻り値: セッション ID を返します
Function 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;
}


/****** 確認コードを生成します ******/
アイデア: 一意性とランダム性を考慮すると、セッション ID は一意であるため、検証コードはセッション ID から文字列をインターセプトするだけでよいため、このアイデアは比較的単純です。考え抜いた。

/*
関数名: create_check_code()
関数関数: ランダムなチェックコードを生成します
パラメータ: $len: 必要なチェックコードの長さは16桁を超えないようにしてください。デフォルトは4桁です
戻り値: 指定された長さのチェックコードを返します
function 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, 0,0,0); // 背景色
$white = ImageColorAllocate($im, 255,255,255); // 前景色
$gray = ImageColorAllocate($im, 200,200,200);

// 4 桁の整数の検証コードを変更します。画像に描画されます
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);
}

ここでは、create_check_image() 関数を参照する必要があることに注意してください。別ファイルの場合、ファイルヘッダ出力時の出力形式が画像形式のため、他のコンテンツと混在して画像は表示されません。また、画像の生成機能を変更することもできます。たとえば、色を変更したい場合は、前景色と背景色の生成位置を変更すると、同時に色も変わります。チェックコードの色を変更する必要があります。変更しないと、背景とチェックコードが黒くなり、表示されません。 転載の際は出典を明記してください:SessionIDと画像検証コードを生成するphpの考え方と実装

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。