$_SESSION gibt nichts aus

Alles, was den Apache betrifft, kann hier besprochen werden.

$_SESSION gibt nichts aus

Postby rkami » 30. May 2014 10:39

Hallo Forum,
wollte in einem Kontaktformular ein Captcha installieren. Seit ein paar Tagen versuche ich es zum Laufen zu bringen. Leider immer wieder vergebens. Habe einiges probiert, hat alles nicht funktioniert.
Nun habe ich ein kleines Script geschrieben um die $_SESSION zu kontrollieren. Und siehe da: Die $_SESSION nimmt wohl nichts an. Woran kann das liegen?

Code: Select all
// Session starten
session_start();

// Variablen initialisieren
$NameFehler = $EmailFehler = $NachrichtFehler = $CaptchaFehler = FALSE;
$Fehlerfrei = TRUE;
$_SERVER['meine'] = 'Alles möglich';
var_dump($_SESSION) . ' ___ hier die Session';

Ergebnis:
array(0) { }
Habe ich bei der Programmierung etwas falsch. Wo kann ich das evtl. einstellen?
Wer kann mir dabei helfen?

Viele Grüße
rkami
Windows 10 64bit, 8GB RAM
rkami
 
Posts: 44
Joined: 10. January 2006 15:59
Location: Düsseldorf

Re: $_SESSION gibt nichts aus

Postby Nobbie » 30. May 2014 13:51

rkami wrote:Und siehe da: Die $_SESSION nimmt wohl nichts an. Woran kann das liegen?


Was heißt "nimm wohl nichts an"?? Was meinst Du damit?

rkami wrote:Und
Ergebnis:
array(0) { }


Was sonst? Was sollte denn drin stehen, ich sehe nirgends eine Wertzuweisung?!
Nobbie
 
Posts: 13174
Joined: 09. March 2008 13:04

Re: $_SESSION gibt nichts aus

Postby rkami » 30. May 2014 14:58

Da habe ich mich aber blamiert. Richtig, war keine Zuweisung.
Das funktioniert wenn die richtige Zuweisung gemacht wird.
nun Originalcode: Bilderstellung und Zuweisung der Session
Code: Select all
<?php
// Session starten
session_start();
// Alten CAPTCHA-Code aus der Session loeschen
unset( $_SESSION['captcha_code'] );



// Dem Browser mitteilen das es sich hierbei um ein JPG handelt.
header( 'Content-type: image/jpeg' );

// Sicherheitscode generieren
$AlphaNumerischerString = "ABCDEFGH2345689";
$ZufallString1 = substr( str_shuffle( $AlphaNumerischerString ), 0, 2 );
$ZufallString2 = substr( str_shuffle( $AlphaNumerischerString ), 0, 2 );
$ZufallString3 = substr( str_shuffle( $AlphaNumerischerString ), 0, 2 );
$ZufallStringKomplett = $ZufallString1.$ZufallString2.$ZufallString3;



// Sicherheitscode in der Session speichern
$_SESSION['captcha_code'] = md5( $ZufallStringKomplett );

// Grafik erzeugen und an den Browser senden
$Schriftarten = array( "zachary.ttf", "mtcorsva.ttf", "gilligan.ttf");
$Bilddatei = imagecreatefrompng( "hintergrund.png" );
$TextFarbe1 = imagecolorallocate( $Bilddatei, 0, 125, 0 );
$TextFarbe2 = imagecolorallocate( $Bilddatei, 130, 70, 90 );
$TextFarbe3 = imagecolorallocate( $Bilddatei, 180, 90, 190 );
imagettftext( $Bilddatei, 12, 15, 3, 24, $TextFarbe1, $Schriftarten[0], $ZufallString1 );
imagettftext( $Bilddatei, 16, 0, 26, 15, $TextFarbe2, $Schriftarten[1], $ZufallString2 );
imagettftext( $Bilddatei, 14, -20, 53, 18, $TextFarbe3, $Schriftarten[2], $ZufallString3 );
imagejpeg( $Bilddatei );

// Grafik zerstoeren und Speicher freigeben
imagedestroy( $Bilddatei );


und das ist das Programm um es ausführen zu können:
Code: Select all
<?php
// Session starten
session_start();

// Variablen initialisieren
$NameFehler = $EmailFehler = $NachrichtFehler = $CaptchaFehler = FALSE;
$Fehlerfrei = TRUE;

// Formular wurde abgeschickt
if (isset( $_POST['senden'] ))
{
   // Felder auf Inhalt pruefen
   if (strlen( trim( $_POST['name'] ) ) < 3)
   {
      $Fehlerfrei = FALSE;
      $NameFehler = TRUE;
   }
   if (strlen( trim( $_POST['email'] ) ) < 3)
   {
      $Fehlerfrei = FALSE;
      $EmailFehler = TRUE;
   }
   if (strlen( trim( $_POST['nachricht'] ) ) < 3)
   {
      $Fehlerfrei = FALSE;
      $NachrichtFehler = TRUE;
   }
   if (md5( $_POST['sicherheitscode'] ) != $_SESSION['captcha_code'])
   {
      $Fehlerfrei = FALSE;
      $CaptchaFehler = TRUE;
   }
   
   // Wenn alle Felder ausgefuellt wurden und der CAPTCHA-Code korrekt war
   if ($Fehlerfrei)
   {
      // Code zum Email-Versand ausfuehren
      echo "<h2>Das Formular wurde korrekt ausgefuellt!</h2>";
   }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Kontaktformular mit CAPTCHA</title>

<style type="text/css">
<!--
body {font-size: 62.5%;}
fieldset {width: 235px; padding: 5px; border: solid 1px #CCCCCC;}
legend {font: bold 1.6em "Courier New", Courier, monospace; color: #0099FF;}
input, textarea {width: 220px;}
input.button {width: 150px; margin: 15px 0px 10px 40px; font: bold 1.2em Verdana, Arial, Helvetica, sans-serif;}
label {display: block; font: bold 1.1em Verdana, Arial, Helvetica, sans-serif; margin-top: 10px;}
img {margin: 15px 0 0 75px;}
-->
</style>
</head>

<body>
<form id="kontaktformular" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
   <fieldset>
       <legend>Kontaktformular</legend>
        <label for="name"><?php echo $NameFehler ? '<span style="color: #FF0000;">Ihr Name:</span>' : 'Ihr Name:'; ?></label>
           <input name="name" id="name" type="text" value="<?php echo $_POST['name']; ?>" />
        <label for="email"><?php echo $EmailFehler ? '<span style="color: #FF0000;">Ihre Email:</span>' : 'Ihre Email:'; ?></label>
           <input name="email" id="email" type="text" value="<?php echo $_POST['email']; ?>" />
        <label for="nachricht"><?php echo $NachrichtFehler ? '<span style="color: #FF0000;">Ihre Nachricht:</span>' : 'Ihre Nachricht:'; ?></label>
           <textarea rows="6" name="nachricht" id="nachricht"><?php echo $_POST['nachricht']; ?></textarea>
        <img src="captcha.php" alt="Sicherheitscode" title="Sicherheitscode" width="80" height="25" />
        <label for="sicherheitscode"><?php echo $CaptchaFehler ? '<span style="color: #FF0000;">Bitte Sicherheitscode eingeben:</span>' : 'Bitte Sicherheitscode eingeben:'; ?></label>
           <input name="sicherheitscode" id="sicherheitscode" type="text" />
        <input name="senden" id="senden" type="submit" value="Absenden" class="button" />
   </fieldset>
</form>
</body>
</html>

Es entsteht immer der Fehler. Nach aufruf der Session mit
Code: Select all
var_dump($_SESSION)

ist nichts drin. Oder bin ich blind.
Windows 10 64bit, 8GB RAM
rkami
 
Posts: 44
Joined: 10. January 2006 15:59
Location: Düsseldorf

Re: $_SESSION gibt nichts aus

Postby Nobbie » 30. May 2014 16:19

Ich sehe kein var_dump($S_SESSION) im Code?
Nobbie
 
Posts: 13174
Joined: 09. March 2008 13:04

Re: $_SESSION gibt nichts aus

Postby rkami » 30. May 2014 17:54

aber auf meinem PC habe ich es eingegeben. Direkt hinter body.
Code: Select all
<?php
var_dump($_SESSION) . ' ___ hier die Session';
echo '<br />' . md5($_POST['sicherheitscode']) . ' POST Formular<br />'; ?>
<?php echo  '<br />1= ' . md5($_POST['sicherheitscode'])  . ' POST<br />' .
         '2= ' . $_SESSION['captcha_code'] . ' SESSION<br /><br />';
echo $_POST['xxx'] . ' POST xxx <<<____';
?>

Die POST-Sachen kommen. Alles Mögliche versucht. Kann sein, daß ich schon den Überblick verloren habe.
Windows 10 64bit, 8GB RAM
rkami
 
Posts: 44
Joined: 10. January 2006 15:59
Location: Düsseldorf

Re: $_SESSION gibt nichts aus

Postby Nobbie » 30. May 2014 20:50

rkami wrote:aber auf meinem PC habe ich es eingegeben.


Das ist nur total sinnlos - Du willst doch VON UNS Hilfe, also zeig uns doch bitte genau, was Du machst.

rkami wrote:Direkt hinter body.
Code: Select all
<?php
var_dump($_SESSION) . ' ___ hier die Session';
echo '<br />' . md5($_POST['sicherheitscode']) . ' POST Formular<br />'; ?>
<?php echo  '<br />1= ' . md5($_POST['sicherheitscode'])  . ' POST<br />' .
         '2= ' . $_SESSION['captcha_code'] . ' SESSION<br /><br />';
echo $_POST['xxx'] . ' POST xxx <<<____';
?>



Direkt wo hinter body was? Es ist wirklich grausam mit Dir.

rkami wrote:Kann sein, daß ich schon den Überblick verloren habe.


Möglich. MIndestens hast Du das Talent, ausdauernd und trotz mehrfacher Nachfrage nicht einfach mal den KOMPLETTEN Code aller beteiligten Scripts zu zeigen. Und dass Du vielleicht noch ein paar erklärende Worte zufügst (eigentlich Mindestvoraussetzung und wenigstens der Normalfall), da glaube ich ja schon fast nicht mehr dran.

Wieso bist Du nicht in der Lage, einfach (und das ist doch wirklich das einfachste der ganzen Welt) genau das hierhin zu kopieren, was Du da ausprobierst? Statt hier falschen Code zu zeigen, dort unvollständigen Code, herumzulamentieren, was wie eigentlich hätte gemeint sein sollen - das ist unverständliches Gemurkse.

Ich warte jetzt noch einen einzigen Versuch ab - wenn der wieder daneben geht, muss Dir irgendjemand anderes helfen, aber ich gebe dann auf. Dir fehlt ganz offensichtlich die schiere Vorstellungskraft, wie unendlich schwer es für Dritte ist, zu verstehen, was Du da machst und versuchst. Du weißt und siehst ALLES, und findest trotzdem das Problem nicht. Was glaubst Du, wie sich die Chancen "verbessern", wenn man stattdessen GAR NICHTS weiß, sondern immer nur so ein paar unvollständige oder fehlerhafte Brocken hingeworfen zu bekommen?

Also, letzte Chance. Vergiss nicht: es ist DEIN Problem. Und Du willst Hilfe von UNS.
Nobbie
 
Posts: 13174
Joined: 09. March 2008 13:04

Re: $_SESSION gibt nichts aus

Postby rkami » 30. May 2014 21:09

Nochmals der Code:
captcha.php
Code: Select all
<?php
// Session starten
session_start();
// Alten CAPTCHA-Code aus der Session loeschen
unset( $_SESSION['captcha_code'] );

// Das Cachen der Grafik verhindern
header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
header( "Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT" );
header( "Cache-Control: no-store, no-cache, must-revalidate" );
header( "Cache-Control: post-check=0, pre-check=0", false );

// Dem Browser mitteilen das es sich hierbei um ein JPG handelt.
header( 'Content-type: image/jpeg' );

// Sicherheitscode generieren
$AlphaNumerischerString = "ABCDEFGH2345689";
$ZufallString1 = substr( str_shuffle( $AlphaNumerischerString ), 0, 2 );
$ZufallString2 = substr( str_shuffle( $AlphaNumerischerString ), 0, 2 );
$ZufallString3 = substr( str_shuffle( $AlphaNumerischerString ), 0, 2 );
$ZufallStringKomplett = $ZufallString1.$ZufallString2.$ZufallString3;

//----> diesen Teil habe ich zur Kontrolle ob alle Variable gesendet werden
$_POST['xxx'] = $ZufallStringKomplett;


// Sicherheitscode in der Session speichern
$_SESSION['captcha_code'] = md5( $ZufallStringKomplett );

// Grafik erzeugen und an den Browser senden
$Schriftarten = array( "zachary.ttf", "mtcorsva.ttf", "gilligan.ttf");
$Bilddatei = imagecreatefrompng( "hintergrund.png" );
$TextFarbe1 = imagecolorallocate( $Bilddatei, 0, 125, 0 );
$TextFarbe2 = imagecolorallocate( $Bilddatei, 130, 70, 90 );
$TextFarbe3 = imagecolorallocate( $Bilddatei, 180, 90, 190 );
imagettftext( $Bilddatei, 12, 15, 3, 24, $TextFarbe1, $Schriftarten[0], $ZufallString1 );
imagettftext( $Bilddatei, 16, 0, 26, 15, $TextFarbe2, $Schriftarten[1], $ZufallString2 );
imagettftext( $Bilddatei, 14, -20, 53, 18, $TextFarbe3, $Schriftarten[2], $ZufallString3 );
imagejpeg( $Bilddatei );

// Grafik zerstoeren und Speicher freigeben
imagedestroy( $Bilddatei );

?>


und nun das Kontaktformular:
kontaktformular.php
Code: Select all
<?php
// Session starten
session_start();

// Variablen initialisieren
$NameFehler = $EmailFehler = $NachrichtFehler = $CaptchaFehler = FALSE;
$Fehlerfrei = TRUE;

// Formular wurde abgeschickt
if (isset( $_POST['senden'] ))
{
   // Felder auf Inhalt pruefen
   if (strlen( trim( $_POST['name'] ) ) < 3)
   {
      $Fehlerfrei = FALSE;
      $NameFehler = TRUE;
   }
   if (strlen( trim( $_POST['email'] ) ) < 3)
   {
      $Fehlerfrei = FALSE;
      $EmailFehler = TRUE;
   }
   if (strlen( trim( $_POST['nachricht'] ) ) < 3)
   {
      $Fehlerfrei = FALSE;
      $NachrichtFehler = TRUE;
   }
   if (md5( $_POST['sicherheitscode'] ) !== $_SESSION['captcha_code'])
   {
      $Fehlerfrei = FALSE;
      $CaptchaFehler = TRUE;
   }
   
   // Wenn alle Felder ausgefuellt wurden und der CAPTCHA-Code korrekt war
   if ($Fehlerfrei)
   {
      // Code zum Email-Versand ausfuehren
      echo "<h2>Das Formular wurde korrekt ausgefuellt!</h2>";
   } else {
      echo '<h2>es sind Fehler aufgetreten = ' . $CaptchaFehler . '</h2>';
   }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Kontaktformular mit CAPTCHA</title>

<style type="text/css">
<!--
body {font-size: 62.5%;}
fieldset {width: 235px; padding: 5px; border: solid 1px #CCCCCC;}
legend {font: bold 1.6em "Courier New", Courier, monospace; color: #0099FF;}
input, textarea {width: 220px;}
input.button {width: 150px; margin: 15px 0px 10px 40px; font: bold 1.2em Verdana, Arial, Helvetica, sans-serif;}
label {display: block; font: bold 1.1em Verdana, Arial, Helvetica, sans-serif; margin-top: 10px;}
img {margin: 15px 0 0 75px;}
-->
</style>
</head>

<body>
<?php
//----> Hier nun die Abfrage der Session und POST
var_dump($_SESSION) . ' ___ hier die Session';
echo '<br />' . md5($_POST['sicherheitscode']) . ' POST Formular<br />'; ?>
<?php echo  '<br />1= ' . md5($_POST['sicherheitscode'])  . ' POST<br />' .
         '2= ' . $_SESSION['captcha_code'] . ' SESSION<br /><br />';
echo $_POST['xxx'] . ' POST xxx <<<____';
//----> Ende Einschub meiner Abragen
?>
<form id="kontaktformular" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
   <fieldset>
       <legend>Kontaktformular</legend>
        <label for="name"><?php echo $NameFehler ? '<span style="color: #FF0000;">Ihr Name:</span>' : 'Ihr Name:'; ?></label>
           <input name="name" id="name" type="text" value="<?php echo $_POST['name']; ?>" />
        <label for="email"><?php echo $EmailFehler ? '<span style="color: #FF0000;">Ihre Email:</span>' : 'Ihre Email:'; ?></label>
           <input name="email" id="email" type="text" value="<?php echo $_POST['email']; ?>" />
        <label for="nachricht"><?php echo $NachrichtFehler ? '<span style="color: #FF0000;">Ihre Nachricht:</span>' : 'Ihre Nachricht:'; ?></label>
           <textarea rows="6" name="nachricht" id="nachricht"><?php echo $_POST['nachricht']; ?></textarea>
        <img src="captcha.php" alt="Sicherheitscode" title="Sicherheitscode" width="80" height="25" />
        <label for="sicherheitscode"><?php echo $CaptchaFehler ? '<span style="color: #FF0000;">Bitte Sicherheitscode eingeben:</span>' : 'XXBitte Sicherheitscode eingeben:'; ?></label>
           <input name="sicherheitscode" id="sicherheitscode" type="text" />
        <input name="senden" id="senden" type="submit" value="Absenden" class="button" />
   </fieldset>
</form>
</body>
</html>


Den Code den ich eingesetzt habe, habe ich gekennzeichnet = //---->
Hoffentlich ist das jetzt richtig zu erkennen.
Windows 10 64bit, 8GB RAM
rkami
 
Posts: 44
Joined: 10. January 2006 15:59
Location: Düsseldorf

Re: $_SESSION gibt nichts aus

Postby Nobbie » 30. May 2014 21:16

Ich sehe jetzt immerhin etwas, aber es ist wildes Zeug. Was soll dieses Statement bewirken:

Code: Select all
var_dump($_SESSION) . ' ___ hier die Session';


Was ist das? Was soll das "hier die Session" ohne einen echo-Befehl oder so? Das ist doch schräges Zeug!?

Und bevor wir tiefer einsteigen: wieso rufst Du im Formular das Script selbst noch einmal auf?? Egal wo was schief geht - das ist schon sehr grausam. Trenne doch bitte mal Deinen Code so auf, wie es zur Logik passt:

a) ein Script für das Captcha

b) ein Script für das Formular, welches das Captcha anzeigt und dem Anwender die Möglichkeit gibt, eine Eingabe zu machen. Eigentlich reicht da ein normales HTML Formular, ohne PHP.

c) und ein Prüfscript, welches die Eingabe des Anwenders überprüft und entsprechend reagiert (hier hast Du dasselbte Scirpt wie unter b) - das ist wüst und unlogisch).

Möglicherweise findest Du den Fehler alleine schon deswegen, weil Du dann selbst die Logik sauber nachvollziehen kannst.
Nobbie
 
Posts: 13174
Joined: 09. March 2008 13:04

Re: $_SESSION gibt nichts aus

Postby rkami » 30. May 2014 22:10

Code: Select all
var_dump($_SESSION) . ' ___ hier die Session';


Da habe ich das echo vergessen! Stimmt. Habe es eingesetzt. Trotzdem wird bei der Ausführung keine Daten wiedergegeben.

Im Formular wird das Captcha-Symbol mit :
Code: Select all
        <img src="captcha.php" alt="Sicherheitscode" title="Sicherheitscode" width="80" height="25" />
        <label for="sicherheitscode"><?php echo $CaptchaFehler ? '<span style="color: #FF0000;">Bitte Sicherheitscode eingeben:</span>' : 'XXBitte Sicherheitscode eingeben:'; ?></label>
           <input name="sicherheitscode" id="sicherheitscode" type="text" />

aufgerufen.
Das ist das Bild im Browser:
Image
Dieses Bild wird im captcha.php gebildet und dann im Formular ausgegeben.
Im captcha.php werden erst die 3 Buchstabenpaare gebildet dann wird davon das Bild erstellt. Wobei vorher noch die Buchstabenpaare in die Session eingetragen werden damit sie mit dem Code vom Formular verglichen werden können. Und das macht es eben nicht. Hilft es bei dem Verständnis des Codes?
Windows 10 64bit, 8GB RAM
rkami
 
Posts: 44
Joined: 10. January 2006 15:59
Location: Düsseldorf

Re: $_SESSION gibt nichts aus

Postby Nobbie » 30. May 2014 22:15

rkami wrote:, Hilft es bei dem Verständnis des Codes?


Die Frage musst Du Dir selbst beantworten. Siehe mein vorhehendes Posting: trenne die Module in drei Teile auf. Du hast ganz offensichtlich Verständnisprobleme, wann genau was passiert. Wenn das Captcha zum ersten Mal gezeigt wird, ist $_SESSION im Formular definitiv NICHT BESETZT!! Das ist RICHTIG so!
Nobbie
 
Posts: 13174
Joined: 09. March 2008 13:04

Re: $_SESSION gibt nichts aus

Postby rkami » 30. May 2014 22:35

Sobald man das Formular aufruft ist natürlich das Captcha schon im Formular integriert. Nach Eingabe der Buchstaben oder Zahlen wird geprüft ob ein Name, email und Nachricht enthalten sind und der eingegebene Sicherheitscode mit dem Captchacode übereinstimmt. Ist der Code OK wird eine Erfolgsmeldung ausgegeben. Gut, man könnte natürlich jedem Feld eine separate Fehlermeldung mitgeben.
Trotzdem fehlt im Vergleich der Sessionscode als Vergleich. Deswegen immer der Fehlercode. Ich will dann im Formular einen Sendenbutton einblenden sobald der Captchacode in Ordnung ist.
Windows 10 64bit, 8GB RAM
rkami
 
Posts: 44
Joined: 10. January 2006 15:59
Location: Düsseldorf

Re: $_SESSION gibt nichts aus

Postby Nobbie » 31. May 2014 13:58

rkami wrote:Sobald man das Formular aufruft ist natürlich das Captcha schon im Formular integriert.


Ja, aber die Variable $_SESSION['captcha_code'] ist da noch nicht besetzt. Die gibt es erst beim nächsten Formularaufruf.
Last edited by Nobbie on 31. May 2014 15:31, edited 1 time in total.
Nobbie
 
Posts: 13174
Joined: 09. March 2008 13:04

Re: $_SESSION gibt nichts aus

Postby rkami » 31. May 2014 14:30

Wollte nur den Erfolg vermelden.
http://rkami.de/test_captcha/kontaktformular.php
unter dieser Adresse habe ich diesen Test eingebaut.
Windows 10 64bit, 8GB RAM
rkami
 
Posts: 44
Joined: 10. January 2006 15:59
Location: Düsseldorf

Re: $_SESSION gibt nichts aus

Postby Nobbie » 31. May 2014 15:32

Und - was war nun das Problem?
Nobbie
 
Posts: 13174
Joined: 09. March 2008 13:04

Re: $_SESSION gibt nichts aus

Postby rkami » 31. May 2014 16:30

in der captcha.php war die session nicht eingeschaltet. Habe noch kleine Änderungen in der kontaktformular.php vorgenommen.
Windows 10 64bit, 8GB RAM
rkami
 
Posts: 44
Joined: 10. January 2006 15:59
Location: Düsseldorf


Return to Apache

Who is online

Users browsing this forum: No registered users and 510 guests