我写了一个页面'captcha.php'来生成数学验证码,并通过会话将结果发送到请求它的页面。
在captcha.php中:
$_SESSION['captcha'] = $var;//$var is the calculate result
在index.php中:
<img src="/captcha.php"/><input id="captchaa" type="text" name="a"/>
...
<?php
if($_POST['a']==$_SESSION['captcha'])
...
但是我收到了'未定义的索引:验证码'错误 任何提示?或者您还需要更多其他信息?
更新: 这些行都在两个文件中 如果(!isset($ _ SESSION)) { 在session_start(); }
更新:
我想我找到了原因。我的index.php在Yii的框架中,它有一个带id的会话,但是captcha.php不在框架内,所以他们不能共享一个session.I试图让它成为一个视图(/ validation / captcha) ,但它不会以这种方式正确生成图像,不知道为什么。
现在的问题是如何在captcha.php中使用Yii的会话。
答案 0 :(得分:2)
你在两个文件中都使用了session_start功能吗?
答案 1 :(得分:0)
如果没有看到captcha.php的其余内容很难说,你在设置会话变量之前调用了session_start()吗?
答案 2 :(得分:0)
变量$ _SESSION ['captcha']在index.php中不可用,直到下一页加载,因为它是在您当前所在的请求之后创建的,如果有意义的话。
检查表单是否已提交/然后/只要正确使用session_start(),检查$ _SESSION的值就应该有效。
答案 3 :(得分:0)
我同意关于session_start的 mishu 。 '未定义索引:验证码'不是错误。这是一个警告。如果不抑制警告消息的输出,则应检查指定的数组索引是否确实存在:
if(isset($_POST['a']) && isset($_SESSION['captcha'])&&$_POST['a']==$_SESSION['captcha'])
...
要取消警告输出,您应使用error_reportning功能,如果它对您不重要。
答案 4 :(得分:0)
这是因为captcha.php
由浏览器在单独的请求中处理。因此,流程如下:
index.php
文件。 否 $_SESSION['captcha']
已设置,因此未输出任何内容src
的{{1}}参数,并将该网址加入img
并设置captcha.php
,但页面已经呈现。因此,实际上,$_SESSION['captcha']
在处理$_SESSION['captcha']
之后设置为,甚至在另一个index.php
请求之后设置。
作为一种解决方法,您可以使用AJAX加载验证码,通过AJAX请求传递验证码值和图像,而不是将它们注入HTML页面。