PHP Captcha - 会话总是空的

Dav*_*son 2 php session captcha

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

我使用以下课程: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();
?>
Run Code Online (Sandbox Code Playgroud)

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

现在我调查了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;
     }
  }
Run Code Online (Sandbox Code Playgroud)

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

无论我尝试什么,$ _SESSION总是空的,即使我在create()中手动添加$ _SESSION ['bla'] ='bla'; 功能,它不会出现.

有没有人知道造成这种情况的原因,或者我做错了什么?

谢谢!

cry*_*c ツ 6

<?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();

?>
Run Code Online (Sandbox Code Playgroud)

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

  • @cryptic啊,我忘了我正在查看图像文件:)对于从客户端到服务器的每个请求,您需要一个会话启动.所以一个用于php文件,php生成的图像,php生成的JS,php生成的CSS等等,每个人都需要它自己的`session_start`. (2认同)