<?php session_start();//将随机数存入session中 srand((double)microtime()*1000000);//播下一个生成随机数字的种子,以方便下面随机数生成的使用 $im = imagecreate(62,20); //制定图片背景大小 $black = ImageColorAllocate($im, 0,0,0); //设定三种颜色 $white = ImageColorAllocate($im, 255,255,255); $gray = ImageColorAllocate($im, 200,200,200); imagefill($im,0,0,$gray); //采用区域填充法,设定(0,0) while(($authnum=rand()%100000)<10000); $_SESSION['authnum']=$authnum; //将四位整数验证码绘入图片 imagestring($im, 5, 10, 3, $authnum, $black); // 用 col 颜色将字符串 s 画到 image 所代表的图像的 x,y 座标处(图像的左上角为 0, 0)。 //如果 font 是 1,2,3,4 或 5,则使用内置字体 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);?>
<?php session_start();?><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gbk" /> <script type="text/javascript" src="./jquery-1.7.2.min.js"></script> <script type="text/javascript"> </script> </head> <body> <div id="main" style="position:absolute; top:22%; left:26%; width:600px; height:400px; background-color:#BCBCBC;"> <img alt="全球通" src="..." /><h2 style="position:absolute; top:1%; left:15%;">全球通俱乐部</h2> <div style="position:absolute; top:19%; left:19%; width:400px; height:250px; background-color:#949494"> <h4 style="position:absolute; top:0%; left:25%;">全球通俱乐部会所后台</h4> <div style="position:absolute; top:20%; left:14%; width:290px; height:160px;"> <form action="<{}>"> <table> <tr> <td style="text-align:right;">会所账号:</td> <td><input name="username"/></td> </tr> <tr> <td style="text-align:right;">密码:</td> <td><input name="password" type="password"/></td> </tr> <tr> <td style="text-align:right;">验证码:</td> <td><input id="checkimg" name="checkcode" onkeyup="check()" style="width:60px"><img alt="点击可刷新" style="cursor:pointer; position:absolute; top:35%; left:55%;" src="checkcode.php" onClick="this.src='checkcode.php'+'?a'+'='+new Date().getTime()"></img></td> </tr> </table> </form> <?php echo $_SESSION['authnum'];//这里的输出老慢一拍 ?> </div> </div> </div> </body></html>
とても興味深いですね、ポスターは自分自身を混乱させています。
なぜこの Web ページにセッションが必要なのですか?
確認コードの画像に SESSION があり、フォームを送信するページで SESSION を使用しているのは、自分が愚かであることを証明するためですか?
投稿者の希望に関係なく、まず問題を見てみましょう
while(($authnum=rand()%100000)<10000);
$_SESSION['authnum']=$authnum;
これは SESSION を意味します。変数の割り当ては条件付きです。生成した乱数が条件を満たさない場合、認証番号は前回から保存されますが、後続のコードは出力されるため、出力は確実に同期されません。
PHP コード
session_start();//乱数をセッションに保存
srand((double)microtime()*1000000);// 使いやすいように乱数を生成するシードをまきます以下の乱数生成
$im = imagecreate(62,20); //画像の背景サイズを設定します
$black = ImageColorAlloca...
実行順序の問題。更新されるたびに、最後の $authnum が取得されるのは、自分で考えてみればわかります。
質問に真剣に答える人はほんのわずかです。
私は投稿者の意味を理解しています。
// 楼主是不是理解为 <td><input id="checkimg" name="checkcode" onkeyup="check()" style="width:60px"><img alt="点击可刷新" style="cursor:pointer; position:absolute; top:35%; left:55%;" src="checkcode.php" onClick="this.src='checkcode.php'+'?a'+'='+new Date().getTime()"></img></td>//此td先执行,那么肯定session 也改变了。然后 <?php echo $_SESSION['authnum'];//这里的输出老慢一拍 ?>//上面session肯定也是td里的session//------------------------------------------------------//其实你可以做个测试,按你的理解,td上面放 echo session和下面放 echo session 肯定是不一样的//那么你在td上面也放一个,看看他们是否不一致。<?php echo $_SESSION['authnum'];//这里的输出老慢一拍 ?>
元の投稿者の意味が分かりました。 PHP コード
// 元の投稿者はこれを
として理解していますか
フロントエンド コード
Session_start();// セッション変数値を取得します
....
echo $_SESSION[' authnum'];//ここでの出力は上記で取得したものです
この作業は、フロントエンド コード全体がブラウザに到達する前に完了します
そして
それを解決するには?
私も以前にこの問題に遭遇し、後で解決しましたが、どこを変更したか覚えていません。 证 验
yzm.php
& & lt;? PHP
// 検証コード画像を生成
session_start () *1000000); im = imagecreate(50,25);//画像の幅と高さを設定します
$black = ImageColorAllocate($im, 0,0,0);//背景色を設定します
$white = ImageColorAllocate( $im, 255,255,255);//文字色を設定
$gray = ImageColorAllocate($im, 200,200,200);//干渉色
imagefill($im,50,25,$gray)
while(($chk_num=rand( )%10000) )<1000);
$_SESSION["chk_num"] = $chk_num;
// 4 桁の整数の検証コードを画像に描画します
imagestring($im, 15, 5, 1,$chk_num, $white );//5、5、1 はそれぞれフォント サイズ、左マージン、上マージンとして表されます
for($i=0;$i<100;$i++) //干渉ピクセルを追加します
{
imagesetpixel($im) 、 rand()%70 、 rand()%30 、 $gray);
ImagePNG($im);
?>
フロントデスク
< head>
< ;/html>
作成者はそれをチェックして、問題がどこにあるのかを確認できます
フォームを送信するときに正しい確認コードを取得する必要があります
フォーム
どこが間違っているかはすでにわかっていますが、それを解決する方法がわかりません。エラーの理由は、ブラウザが最初にHTMLコードをロードしてから画像をロードするため、画像の撮影が遅くなるからです。画像はセッション後にロードされます
11階さんの返信より引用:
フォーム送信時に正しい認証コードを取得するはずです
エラーの場所はすでにわかっていますが、解決方法がわかりません。ブラウザは最初に HTML コードをロードし、次に写真をロードします。写真はセッション後にロードされるため、写真の撮影に時間がかかります
なぜ現在の写真の情報を知る必要があるのですか?認証コードを実行するときは、入力した認証コードが画像のものと一致しているかどうかを確認する必要があります。それはフォームを送信することで判断できます。
マークは明日職場でそれを見る予定です。
14 階の返信からの引用:
11 階の返信からの引用:
フォームを送信するときに正しい確認コードを取得する必要があるはずです
エラーがどこにあるのかはすでにわかっていますが、方法がわかりませんエラーの理由は、ブラウザが最初に HTML コードをロードしてから画像をロードするためです。画像はセッション後にロードされるため、画像が遅くなります
なぜ情報を知る必要があるのですか。現在のイメージは?確認コードを実行するときは、入力した確認コードが画像のものと一致しているかどうかを確認する必要があります。フォームを送信する限り...
フロントエンドの ajax
は少し遅くなります。間違った使い方です。HTML ページ内で検証コードが参照されており、このとき php を使用して出力するため、php 出力よりもページ出力の方が高速です。これは間違っています。
if($_SERVER["REQUEST_METHOD"] == "POST")
{
echo "サーバーに送信されました" .$_SESSION["VerifyCode"] ."これが入力されました" .$_POST["getcode"];
これは同期されています。ポストバック後のセッションと同じhtmlの検証コード。 2 つが等しいかどうかを確認し、
も同様の問題に遭遇し、
検証のためにフォーム検証情報を別のページに送信しました。このページでは行わないでください。