ホームページ >バックエンド開発 >PHPチュートリアル >非現実的な PHP セッション検証コードに関連する問題を解決する

非現実的な PHP セッション検証コードに関連する問題を解決する

WBOY
WBOYオリジナル
2016-06-13 12:16:16898ブラウズ

PHP セッション認証コードが非現実的である問題を解決しました

最初は画像が表示できず、ひび割れた画像が表示されました。問い合わせたところ、以下の可能性があることが判明しました。

1 ) header("Content-type:image/png");

ini_set('display_errors', 'Off');
の前に次のコードを追加します。私は上記の問題が原因です。

確認コードを生成する画像のコードを添付します

<?php 	ini_set(&#39;display_errors&#39;, &#39;Off&#39;);	header("Content-type:image/png");	session_start();		$_SESSION[&#39;code&#39;] = &#39;null&#39;;			//初始化	$width = &#39;58&#39;;	$height = &#39;22&#39;;	//$code = &#39;&#39;;	$tmptext =&#39;&#39;;	$bordercolor= &#39;&#39;;	for($i=0;$i<4;$i++)	{		$tmptext = rand(0,9);		$code .= $tmptext;	}	$_SESSION[&#39;code&#39;] = $code;	//以下三句诗让浏览器不缓存	@header("Expires:-1");	@header("Cache-Control:no-store,private,posc-check=0,pre-check=0,max-age=0",FALSE);	@header("Pragma:no-cache");		if(function_exists(&#39;imagecreate&#39;) && function_exists(&#39;imagecolorset&#39;) && function_exists(&#39;imagecopyresized&#39;)			&& function_exists(&#39;imagecolorallocate&#39;) && function_exists(&#39;imagesetpixel&#39;) 			&& function_exists(&#39;imagechar&#39;)  &&  function_exists(&#39;imagecreatefromgif&#39;)			&& function_exists(&#39;imagepng&#39;)		)	{		$im = imagecreate($width, $height);		$backgroundcolor = imagecolorallocate($im, 255, 255, 255);		$numorder = array(1,2,3,4);		/**shuffle将数组打乱*/		shuffle($numorder);		/**array_flip返回一个被反转的数组,键值被处理值*/		$numorder = array_flip($numorder);		$x=&#39;&#39;;		$y=&#39;&#39;;		$text_color = &#39;&#39;;		for($i=1;$i<=4;$i++)		{			$x = $numorder[$i] * 13 + mt_rand(0,4) -2;			$y = mt_rand(0,3);			$text_color = imagecolorallocate($im, mt_rand(50,255), mt_rand(50,255), mt_rand(50,255));			/**将字符画在$im图中,5表示字体的大小 $x+5 */			imagechar($im, 5, $x+5, $y+3, $code[$numorder[$i]], $text_color);		}				$linenums = mt_rand(10,32);		for($i=0;$i<=$linenums;$i++)		{			$linecolor = imagecolorallocate($im, 255, mt_rand(0,255), mt_rand(0,255));			$linex = mt_rand(0,255);			$liney = mt_rand(0,255);			imageline($im, $linex, $liney, $linex+mt_rand(0,4)-2, $liney+mt_rand(0,4)-2,  $linecolor);		}				for($i=0;$i<40;$i++)		{			$pointcolor = imagecolorallocate($im, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));			imagesetpixel($im, mt_rand(0,$width), mt_rand(0,$height), $pointcolor);		}				$bordercolor = imagecolorallocate($im, 150, 150, 150);		imagerectangle($im, 0, 0, $width-1, $height-1, $bordercolor);				imagepng($im);		imagedestroy($im);	}?>



2)変数が初期化されていません


3)

ob_clean();



2 番目と 3 番目の方法は問題の解決を保証するものではなく、参照のみを目的としています。

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