0

HTML フォームが PHP ページに送信されて処理されます。フォームにキャプチャを追加する必要がありますが、HTML ページを PHP に変更できないため、HTML フォーム内の画像として出力する capcha.php ページに表示されたキャプチャのセッションを設定しました。ページが読み込まれると、セッション変数が設定されますが、プロセス PHP ページでこのセッションを取得できません。私がこの問題を抱えているのはFirefoxまたはChromeだけです。IEで動作します。

capcha.php でセッションを設定するコード:

session_start(); // start a session
$image = imagecreate(50, 20); //create blank image (width, height)
$bgcolor = imagecolorallocate($image, 0, 0, 0); //add background color with RGB.
$textcolor = imagecolorallocate($image, 255, 255, 255); //add text/code color with RGB.
$code = rand(1000, 9999); //create a random number between 1000 and 9999
$_SESSION['code'] = $code; //add the random number to session 'code'
imagestring($image, 10, 8, 3, $_SESSION['code'], $textcolor); //create image with all the settings above.
header ("Content-type: image/png"); // define image type
imagepng($image); //display image as PNG

PHP プロセス ページ:

session_start();

print_r($_SESSION['code']); 

誰でも手伝ってもらえますか?

編集* 私の HTML フォームに画像として追加された capcha.php に設定されているセッションと関係があると思います。ブラウザで capcha.php にアクセスしてから process_email.php にアクセスすると、セッションが設定されます。したがって、画像として含まれている場合は設定されません。この問題を回避する方法を知っている人はいますか?*

4

3 に答える 3

1

これは興味深い質問のように見えます。これについて詳しく説明してみましょう。

  • 通常、PHP セッションを開始すると、Cookie がユーザーに送信されます。ユーザーがサイトの他のページを開くPHPSESSIDと、HTTP 要求ヘッダーに Cookie があり、Cookie からセッション ID を取得します。次に、サーバーでこの ID のセッションを見つけて、セッション データを読み込みます。
  • 通常、メインの HTML ドキュメントに Cookie を設定します。しかし、これは変更できない静的ドキュメントであるため、そうする必要はありません。
  • HTMLに含まれる画像にCookieを設定します。これまでにこれを行ったことはなく、この場合にブラウザーがどのように動作するかがわかりませんでした。Cookie は画像から完全に取得して、すべてのページで使用する必要があります。

これについてテストを行いました。以下は私の結果です。Chromeですべてを行いました。つまり、PHP ファイルを処理するフォームで Cookie を取得できます。

HTML ページを開きます。このページには Cookie がないことがわかります。 初めて開いた HTML ページの Cookie はありません

このページでは、画像を読み込みます。画像の HTTP 応答には Cookie が指定されています。

PHP セッションの Cookie を指定した画像ファイル

フォームを送信すると、HTTP リクエストで定義された Cookie が取得されます。見てください: フォームが送信され、Cookie が定義されました

これは、期待どおりGoogle Chromeで機能します。

ドメインを確認することをお勧めします。フォーム、画像、送信 URL を含む HTML ページの完全な URL は? 彼らはまったく同じドメインを持っていますか?

もう1つテストを行い、HTTPページとは異なるドメインから画像をロードしました。ただし、これは Chrome だけでなく IE 9 でも機能しません。これが、あなたが何をしているのか推測できない理由です。

Chrome で開発ツールを使用し、すべての Cookie とページ読み込みリクエストを確認することをお勧めします。

于 2013-04-23T15:14:55.163 に答える
0

値を割り当てる前に、まずそのセッションの設定を解除してみてください。

于 2013-04-23T13:56:04.877 に答える