我的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,则设置会话。因此,当它被包括为图像时它不被设置。有没有人知道解决这个问题的方法?*
答案 0 :(得分:1)
这看起来像一个有趣的问题。让我试着更详细地解释一下。
PHPSESSID
Cookie,并从Cookie中获取会话ID。然后,在服务器上找到此ID的会话并加载会话数据。我为此做了一个测试。以下是我的结果。我在Chrome中做了一切。简而言之,我可以在处理PHP文件的表单中获取cookie。
打开HTML页面。我们可以看到此页面上没有cookie。
在此页面上,我们加载图片,图片HTTP响应已指定cookie。
当我提交表单时,我会在HTTP请求中定义cookie。看一看:
这适用于Google Chrome浏览器。
我建议检查域名。带有表单,图片和提交URL的HTML页面的完整URL是什么?他们有完全相同的域名吗?
我再做一次测试并从不同的域然后加载HTTP页面加载图像。但这不仅适用于Chrome,也适用于IE 9。这就是为什么我无法猜测你在做什么。
我建议在Chrome中使用开发工具,并检查所有Cookie和页面加载请求。
答案 1 :(得分:0)
在为其分配值之前,请先尝试取消设置该会话。
答案 2 :(得分:0)
不要忘记在注销文件中添加session_destroy()和
之类的条件if (!isset($_SESSION['session_value'])) {
}
是一种更好的编程方式。