Rechencaptcha - theoretische Sessionfrage

  • Hallo,
    ich habe eine Captcha gebaut, die Zahlen von 0-9 in einem Bild anzeigt und diese in einer Variable Ergebnis addiert ($erg=$z1+$z2).
    Das Ergebnis wird dann zur späteren Überprüfung in eine Session gespeichert.

    Problem:
    Wo erstelle ich die Session.
    --
    Ist die Sessiongenerierung in dem Skript wo die Captcha generiert wird, dann wird die Session nicht erstellt wenn ich nur das Bild per <img src=""> einbinde. Jedoch wenn ich mir die Session auf der Seite include wird nur die Captcha angezeigt und nichts mehr von der Seite was ja auch logisch ist.

    Ich weiß nicht wie ich das Problem nun lösen kann, dass ich die Session generiere mit genau dem Ergebnis was in der Captcha abgefragt wird.

    ------------------------------
    captcha.php

    Code
    include 'zahl.php'; ... (captcha mit zahl generieren)


    zahl.php

    Code
    (zahl generieren)... include 'session.php';


    session.php

    Code
    session_start();
    $_SESSION['cpatcha'] = $erg;


    email.php

    Code
    if ($_POST['captchaerg'] == $_SESSION['cpatcha'])
            {
                $info = '<b><font color="#61A715">Mail wurde erfolgreich versendet.</font></b><br><br>';
            }
            else
            {
                $info = '<b><font color="red">Fehler:</font></b> Die Captcha wurde falsch eingegeben.<br><br>';
            }

    Es wird jedesmal ausgegeben, dass die Captcha falsch ist. :cry:

  • An der Stelle, an der die Zahl ermittelt wird, musst du das in der Session speichern. Das session_start gehört an den Anfang des Scriptes, in dem du diese Dateien per include einbindest. Und das hatte ich dir schon mal geschrieben:

    Richtig debuggen
    1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
    2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(E_ALL); und ini_set("display_errors", true);
    3. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    4. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde (oder auch nicht).
    5. Schritt 3 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    6. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    7. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    8. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.