【问题标题】:PHP - session variable cannot be setPHP - 无法设置会话变量
【发布时间】:2011-11-13 14:41:17
【问题描述】:

我编写了一个页面“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 不在框架内,所以他们不能共享一个会话。我试图使它成为一个视图(/validation/captcha) ,但是那样不能正确生成图像,不知道为什么。

现在的问题是如何在 captcha.php 中使用 Yii 的会话。

【问题讨论】:

    标签: php


    【解决方案1】:

    您是否在两个文件中都使用了session_start 函数?

    【讨论】:

    • 另外请记住,如果您在 captcha.php 中设置会话 var 并且您使用该文件来渲染该图像,考虑到图像在您检查收到的答案之前显示,则保存的值在您的会话中将在您检查时更改
    • if(!isset($_SESSION)) { session_start(); } 在这两个文件中。
    • 我想我找到了原因。我的 index.php 在 Yii 的框架中,它有一个带有 id 的会话,但是 captcha.php 不在框架内,所以他们不能共享一个会话。我试图使它成为一个视图(/validation/captcha) ,但它不会以这种方式正确生成图像,不知道为什么。现在的问题是如何在 captcha.php 中使用 Yii 的 session。
    【解决方案2】:

    这是因为captcha.php浏览器在单独的请求中处理。所以,流程如下:

    1. PHP 执行index.php 文件。 NO $_SESSION['captcha'] 已设置,因此没有输出任何内容
    2. PHP 将内容刷新到浏览器。
    3. 浏览器看到imgsrc 参数并加载该网址
    4. PHP 执行captcha.php 并设置$_SESSION['captcha'],但页面已经呈现。

    所以,实际上您的$_SESSION['captcha'] 是在处理index.php 甚至在另一个HTTP 请求之后设置的。

    作为一种解决方法,您可以使用 AJAX 加载验证码,通过 AJAX 请求传递验证码值和图像,然后将它们注入 HTML 页面。

    【讨论】:

      【解决方案3】:

      没有看到 captcha.php 的其余部分就很难说,你在设置会话变量之前调用了 session_start() 吗?

      【讨论】:

        【解决方案4】:

        变量 $_SESSION['captcha'] 在下一个页面加载之前在 index.php 中不可用,因为它是在您当前所在的请求之后的请求中创建的,如果有意义的话。

        只要正确使用 session_start(),检查表单是否已提交 /then/ 检查 $_SESSION 的值就应该有效。

        【讨论】:

          【解决方案5】:

          我同意 mishu 关于 session_start 的观点。 “未定义索引:验证码”不是错误。这更像是一个警告。如果你不禁止输出警告信息,你应该检查指定的数组索引是否真的存在:

          if(isset($_POST['a']) && isset($_SESSION['captcha'])&&$_POST['a']==$_SESSION['captcha'])
          ...
          

          要抑制警告输出,您应该使用 error_reportning 函数,如果它对您不重要的话。

          【讨论】:

          • 我按照你说的做了,程序也发布了然后检查,但是 var_dump($_SESSION['captcha']) 总是 NULL
          猜你喜欢
          • 2014-04-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多