0

我的 HTML 表单被发送到 PHP 页面进行处理。我需要在表单中添加验证码,但无法将 HTML 页面更改为 PHP,因此在 capcha.php 页面中为显示的验证码设置了一个会话,该页面作为 HTML 表单中的图像输出。当页面加载时,会话变量已设置,但我无法在进程 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']); 

有人可以帮忙吗?

编辑* 我认为这与在 capcha.php 中设置的会话有关,该会话作为图像添加到我的 HTML 表单中。如果我在浏览器中转到 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 是什么?他们有完全相同的域吗?

我又做了一项测试并从不同的域加载了图像,然后是 HTTP 页面。但这不仅在 Chrome 中有效,在 IE 9 中也无效。这就是为什么我猜不出你在做什么。

我建议使用 Chrome 中的开发工具并检查所有 cookie 和页面加载请求。

于 2013-04-23T15:14:55.163 回答
0

不要忘记在注销文件中添加 session_destroy() 和类似的条件

if (!isset($_SESSION['session_value'])) {
}

是一种更好的编程方式。

于 2013-04-23T14:28:53.080 回答
0

尝试先取消设置该会话,然后再为其分配值。

于 2013-04-23T13:56:04.877 回答