次のように動作するキャプチャ ジェネレーター ウィッチを使用したい:
1) セキュリティ テキストを $_SESSION 変数に保存します。 2) キャプタ イメージを表示します。
<img src="http://www.website.ro/captcha/captcha_source.php">
キャプチャ画像は、$_SESSION["security_text"] を読み取り、it-s ヘッダーを画像に設定して画像を生成する php ファイルです。
header("Content-type:image/jpeg");
header("Content-Disposition:inline ; filename=secure.jpg");
3) 送信されたテキストを _SESSION 内に保存されているものと比較する
問題: -$_SESSION["outside"]="outside"; を設定しました。image タグの前ですが、captcha_source.php 内では $_SESSION 変数は空です。
-captcha_source.php の先頭に session_start() を指定すると、session_id はサイトの残りの部分と同じですが、_SESSION はまだ空です。
- $_SESSION["inside"]="inside"; を設定した場合 captcha_source.php の内部で、captcha_source.php の外部 (img タグの後) で SESSION を読み取ると、SESSION には ["outside"]="outside" のみが含まれます。(そして、captcha_source 内では、セッションは inside=>inside として出力されます)
-img src=captcha_source.php の行を削除し、SESSION を「test」に設定してフォームに「test」と書くと、送信後にすべてが機能します (ただし、画像が含まれていないため、画像はありません) )。
-画像タグ内にファイルを含める代わりに、「/captcha/captcha_source.php」を含めるように含めると、セッションは正常に設定されますが、不要なテキストではなく画像が必要です。
そのため、セッションはページごとに機能しますが、captcha_soruce.php 内では機能しません。ID が同じであっても、セッションは完全に独立しています。
1 つの推測は、問題は htaccess (ただし、同じセッション ID は奇妙です) によるものであり、おそらく次の行からのものであるということです: (captcha フォルダーの扱いは異なりますが、ベースアドレスは変更しないでください)
RewriteCond $1 !^(index_ro|imagini|extra|fisiere|slider|tinymce|captcha)
RewriteRule ^(.*)/ index_ro.php?$1/
おそらく、同じセッションがファイルの読み取り方法に関係している可能性があります。captcha_source.php からヘッダーを削除し、同じブラウザー (firefox) でファイル www.site.ro/captcha/captcah_source.php を開きます。そして、印刷したガベージテキストとセッションIDとセッション変数が表示されます。同じサイトで複数のタブを開くと、同じ ID が保持されます。
長くないことを願っていますが、この問題に苦しんでから2日が経ちました. うまくいかない場合は、SQLでこれを行いますが、他の状況で再び表示されないように、どこに問題があるかを知りたいです。
ありがとうございました :)
そして、何が起こるかを示すためにコードを取り除いたものを次に示します。
//the form part
<?php
session_start();
echo session_id(); //prints the same as on all pages
//the form was not submittted
if(!$_POST["mail_form_captcha"])
{
unset($_SESSION); //just to be sure nothing remains from older sessions
//generate form that has a field "mail_form_captcha"
[...]
//generate a random text for captcha and put it in security_text
InitCaptcha();
$_SESSION["before"]="before";
?>
<img src="<?php echo "./captcha/image.php"; ?>" />
<?php
//include "./captcha/image.php"; //if uncoment this line, everything works, but the image is included as garbage text
$_SESSION["after"]="after";
print_r($_SESSION); //this prints [security_text] => 10 [before] => before [after] => after
}
else //interpret the submission
{
print_r($_SESSION); //this is empty if session_start() is at the beginning of captcha_source.php, otherwise only contains before after and security_text
}
?>
//the captcha part
<?php
session_start(); //if included, it erases the session from the other files, otherwise it leaves it intact :-/
$_SESSION["inside"]="inside";
print_r($_SESSION); //this prints [inside] => inside
echo session_id(); //this prints the same session id as on the rest of the pages
[...]
imagettftext([...] $_SESSION["security_text"]); //this draws a blank image
[...]
header("Content-type:image/jpeg");
header("Content-Disposition:inline ; filename=secure.jpg");
imagejpeg($img);
?>