【问题标题】:PHP Captcha - Session always emptyPHP Captcha - 会话总是空的
【发布时间】:2013-01-01 00:05:09
【问题描述】:

我正在尝试在我的注册表单中添加验证码。图像渲染得很好,只是会话变量总是空的,所以它根本不起作用..

我正在使用以下课程:http://www.ejeliot.com/pages/php-captcha

根据文档,我必须制作一个包含以下内容的 php 文件:

<?php
require('classes/PhpCaptcha.php');
$aFonts = array('fonts/VeraBd.ttf', 'fonts/VeraIt.ttf', 'fonts/Vera.ttf');
$oVisualCaptcha = new PhpCaptcha($aFonts, 200, 60);
$oVisualCaptcha->SetBackgroundImages('captchaimgbg.jpg');
$oVisualCaptcha->Create();
?>

并将其作为图像包含在内。

现在我查看了 Create();函数,在这个函数中还有另一个名为 GenerateCode() 的函数;被调用,它负责生成字母并将其放入会话变量中。

代码如下:

      function GenerateCode() {
     // reset code
     $this->sCode = '';

     // loop through and generate the code letter by letter
     for ($i = 0; $i < $this->iNumChars; $i++) {
        if (count($this->aCharSet) > 0) {
           // select random character and add to code string
           $this->sCode .= $this->aCharSet[array_rand($this->aCharSet)];
        } else {
           // select random character and add to code string
           $this->sCode .= chr(rand(65, 90));
        }
     }

     // save code in session variable
     if ($this->bCaseInsensitive) {
        $_SESSION[CAPTCHA_SESSION_ID] = strtoupper($this->sCode);
     } else {
        $_SESSION[CAPTCHA_SESSION_ID] = $this->sCode;
     }
  }

CAPTCHA_SESSION_ID 定义在类文件的顶部。 在我的索引中,我有 session_start(); ,我仔细检查了这个,这不是问题。

无论我尝试什么,$_SESSION 始终为空,即使我在 create(); 中手动添加 $_SESSION['bla'] = 'bla';功能,它不显示。

有谁知道是什么原因造成的,或者我做错了什么?

谢谢!

【问题讨论】:

  • 您是否已经转储了要放入会话的变量?它们是空的吗?

标签: php session captcha


【解决方案1】:
<?php

session_start();
require('classes/PhpCaptcha.php');
$aFonts = array('fonts/VeraBd.ttf', 'fonts/VeraIt.ttf', 'fonts/Vera.ttf');
$oVisualCaptcha = new PhpCaptcha($aFonts, 200, 60);
$oVisualCaptcha->SetBackgroundImages('captchaimgbg.jpg');
$oVisualCaptcha->Create();

?>

您需要在访问/设置$_SESSION 变量的所有页面上的代码顶部使用session_start() 开始会话。

【讨论】:

  • 他说:In my index i have session_start()
  • 这似乎解决了它,但是我所有的页面都是通过我的 index.php 文件加载的(它有点 mvc'ish),并且在索引中会话开始了,你能解释我为什么我有重新开始?感谢您的快速回复!
  • @RyanNaddy,是的,在 index.php 文件中,但不是图像文件。它必须在所有访问/设置 $_SESSION 变量的页面中。
  • 你不应该这样做。对我来说,听起来您没有通过索引文件或在开始会话之前加载文件。
  • @cryptic 啊,我忘了我在看一个图像文件 :) 对于从客户端到服务器的每个请求,您都需要一个会话启动。所以一个用于 php 文件、php 生成的图像、php 生成的 JS、php 生成的 CSS 等。每个都需要它自己的session_start
猜你喜欢
  • 2010-11-30
  • 1970-01-01
  • 1970-01-01
  • 2012-06-27
  • 1970-01-01
  • 2015-08-02
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
相关资源
最近更新 更多