PHP会话 - 无法在firefox或chrome中检索会话

时间:2013-04-23 13:45:36

标签: php session browser

我的HTML表单被发送到PHP页面进行处理。我需要在表单中添加验证码,但无法将HTML页面更改为PHP,因此在capcha.php页面中为显示的验证码设置了一个会话,该页面在HTML表单中作为图像输出。当页面加载会话时,var已设置但我无法在进程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,则设置会话。因此,当它被包括为图像时它不被设置。有没有人知道解决这个问题的方法?*

3 个答案:

答案 0 :(得分:1)

这看起来像一个有趣的问题。让我试着更详细地解释一下。

  • 当您启动PHP会话时,通常会向用户发送cookie。当用户在您的网站上打开其他页面时,您会在HTTP请求标头中找到PHPSESSID Cookie,并从Cookie中获取会话ID。然后,在服务器上找到此ID的会话并加载会话数据。
  • 通常您在主HTML文档中设置cookie。但是你没有,因为这是一些你无法改变的静态文档。
  • 您在HTML中包含的图片中设置了Cookie。我之前从未这样做过,我应该承认我不知道浏览器在这种情况下应该如何表现。完美地,cookie应该从图像中获取,然后在所有页面上使用。

我为此做了一个测试。以下是我的结果。我在Chrome中做了一切。简而言之,我可以在处理PHP文件的表单中获取cookie。

打开HTML页面。我们可以看到此页面上没有cookie。 No cookies for the HTML page opened for the first time

在此页面上,我们加载图片,图片HTTP响应已指定cookie。

Image file with cookie for PHP session specified

当我提交表单时,我会在HTTP请求中定义cookie。看一看: Form submitted and cookie defined

这适用于Google Chrome浏览器。

我建议检查域名。带有表单,图片和提交URL的HTML页面的完整URL是什么?他们有完全相同的域名吗?

我再做一次测试并从不同的域然后加载HTTP页面加载图像。但这不仅适用于Chrome,也适用于IE 9。这就是为什么我无法猜测你在做什么。

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

答案 1 :(得分:0)

在为其分配值之前,请先尝试取消设置该会话。

答案 2 :(得分:0)

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

之类的条件
if (!isset($_SESSION['session_value'])) {
}

是一种更好的编程方式。