Session wird nicht geändert
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
ausgabe
check
code
erachten
erfolg
erzeugen
formular
frage
header
http
manual
problem
regel
sache
server
session
stelle
summe
url
-
Ein freundliches hallo an alle =)
Ich habe einen Captcha geschrieben der eine Session mit einem Wert belegt.
Nach absenden eines Formulars wird dann geprüft ob die eingabe mit der Session des Captchas
übereinstimmt.
Dies funktioniert lokal auf XAMPP einwandfrei.
Nachdem ich das ganze aber auf einen Server geladen habe habe ich das Problem das
sich die Session nicht ändert.
Es wird einmal ein Wert zugewiesen und dieser wird nicht mehr geändert.
Captcha
Meines erachtens ist das ja eigentlich eine sache der unmöglichkeit da ich die Session vorher lösche.header("Content-type: image/png"); header("Expires: Sat, 05 Nov 2005 00: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); session_start(); $zahl1 = mt_rand(1, 100); $zahl2 = mt_rand(1, 100); $summe = $zahl1 + $zahl2; unset($_SESSION["att_cp"]); $_SESSION["att_cp"] = $summe;
Auswertung
//und an dieser stelle bleibt der wert der session immer gleich. if($_POST["cp"] != $_SESSION["att_cp"]){ $error = true; }
Was ich aber noch erwähnen möchte ist,
wenn ich die Session auf der seite mit dem Formular ausgebe, funktioniert wieder alles.
Natürlich ist das keine lösung für das Problem.
Also nun meine Frage an euch:
Wieso ist das so und womit hängt das zusammen?
Und wie kann ich das Problem beheben? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich denke, Dein Problem liegt darin, dass "session_start();" ausgeführt werden muss, bevor der Header gesendet wird... in Deinem Script ist es genau anders herum! Siehe auch http://php.net/manual/de/function.session-start.php
Beitrag zuletzt geändert: 1.2.2011 8:31:54 von bvb-fanclub-nr1-in-sundern -
session_start() muss keines falls vor einem header gesetzt werden.
Außer dieser würde in irgenteiner weise eine Ausgabe erzeugen.
Die regel ist das vor dem senden eines headers sowie vor session_start keine Ausgabe erfolgen darf
was hier nicht der fall ist.
Schließlich wird die Session ja auch gesetzt, trotzdem danke für die Antwort. =) -
Das stimmt so nicht. Du löscht ledeglich den Wert aus der Session, nicht die Session selbst. Allgemein gilt, wenn du ein Array löschen willst, müsstest du das mit unset($_SESSION) machen (siehe PHP-Doku), allerdings ist das bei Sessions anders: die lassen sich nur mit session_destroy() sicher leeren.
Meines erachtens ist das ja eigentlich eine sache der unmöglichkeit da ich die Session vorher lösche.unset($_SESSION["att_cp"]); $_SESSION["att_cp"] = $summe;
Alleine das Verwenden von $_SESSION["att_cp"] = $summe; sollte aber bereits den alten Wert überschreiben.
Was mir jetzt noch nicht ganz klar ist: wolltest du die Session ganz löschen, oder nur einen einzelnen Wert ändern? -
Das stimmt so nicht. Du löscht ledeglich den Wert aus der Session, nicht die Session selbst.
Richtig ich hab mich an der stelle falsch ausgedrückt.
Ich wollte nur den einzelnen Wert löschen in der hoffnung das es dann
funktioniert, obwohl mir bewusst war das es auch ohne funktioniert.
Hat aber nichts bewirkt.
Aus diesem Grund spielt das unset eigentlich keine weitere Rolle mehr.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage