PHP Captcha - Sesión siempre vacía

Estoy tratando de agregar un captcha a mi formulario de registro. La imagen se muestra bien, excepto que la variable de sesión siempre está vacía, por lo que no funciona en absoluto.

Estoy usando la siguiente clase: http://www.ejeliot.com/pages/php-captcha

De acuerdo con la documentación, tuve que hacer un archivo php con el siguiente contenido:

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

E incluir esto como una imagen.

Ahora he mirado en Create(); función, y en esta función otra función llamada GenerateCode(); se llama, que se encarga de generar las letras y ponerlas en una variable de sesión.

El código es el siguiente:

      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;
     }
  }

El CAPTCHA_SESSION_ID se define en la parte superior del archivo de clase. En mi índice tengo session_start(); , revisé dos veces esto y ese no es el problema.

No importa lo que intente, $_SESSION siempre está vacío, incluso si agrego $_SESSION['bla'] = 'bla' manualmente en create(); función, no aparece.

¿Alguien tiene una idea de qué está causando esto, o qué estoy haciendo mal?

¡Gracias!

preguntado el 31 de diciembre de 12 a las 15:12

¿Has hecho un volcado de las variables que estás poniendo en la sesión? ¿Están vacíos? -

1 Respuestas

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

?>

Tienes que empezar la sesión con session_start() en la PARTE SUPERIOR del código en todas las páginas que acceden/configuran $_SESSION variables.

Respondido el 31 de diciembre de 12 a las 16:12

Él dijo: In my index i have session_start() - Salir de mi césped

Esto parece solucionarlo, sin embargo, todas mis páginas se cargan a través de mi archivo index.php (es un poco mvc'ish), y en el índice se inician las sesiones, ¿podría explicarme por qué tengo que iniciarlas de nuevo? ¡Gracias por tu rápida respuesta! - david ericsson

@RyanNaddy, sí, en el archivo index.php, pero no en el archivo de imagen. Tiene que estar en TODAS las páginas que acceden/establecen $_SESSION vars. - críptico ツ

No deberías tener que hacerlo. Para mí, parece que no está cargando el archivo a través de su archivo de índice, o antes de comenzar su sesión. - Salir de mi césped

@cryptic ahh, olvidé que estaba mirando un archivo de imagen :) Para cada solicitud de un cliente al servidor, necesita iniciar una sesión. Entonces, uno para archivos php, imagen generada por php, JS generado por php, CSS generado por php, etc. cada uno necesitaría su propio session_start. - Salir de mi césped

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.