COOKIES und SESSIONS genaue Funktionsweise

DerBo

Mitglied
Hallo zusammen,
ich bin recht neu hier. Ich bin seit einiger Zeit mit Cookies dran. Ich habe mir eine Seite aufgebaut, die in Sessions Variablen speichert.
Das mit den Sessions klappt auch super, nur das mit den Cookies verstehe ich einfach nicht, ich habe die ersten Seiten von Google durch gearbeitet aber nirgends verstehe ich das. Kann sein das ich dazu zu dumm bin ;)

Mein Problem: Ich möchte die Farbe, also den namen der CSS (es gibt mehrere) meiner Seite in einem Cookie speichern. Dazu macht man ja ganz oben erstmal
PHP:
<?php session_start();?>
Danach möchte ich dann einfach abfragen ob es bereits ein Cookie gibt
PHP:
if(isset($_COOKIE["color"])) {...
Danach, wenn es existiert, speicher ich den inhalt der Sessionvariable(wenn sie verändert wurde) in dem Cookie
PHP:
$_COOKIE["color"] = $_SESSION["color"];
Wenn das Cookie noch nicht existiert, dann möchte ich das setzen.
Nun fängt mein Problem an. Wenn ich die Funktion setcookie() nehme, dann gibt es einen Fehler, da das setcookie() ja vor allem HTML Code stehen muss.
Also würde ich das Cookie ganz oben setzen.
PHP:
<?php session_start();
setcookie("color", "?",0);
Aber, wird dann nicht bei jedem Aufruf der Seite das Cookie überschrieben?
Ich würde gerne einfach haben, das der User eine einmal eingestellte Farbe immer behält (bis die Cookies gelöscht werden, oder er eine neue Farbe wählt), aber das will zum verrecken nicht richtig funktionieren.

Wenn mir dabei jemand helfen kann wäre ich dafür Ultra Dankbar, da ich da schon einige Zeit dran sitze und einfach keine Lösung finde.
 
Ich hab zwar noch nicht mit Sessions in Cookies gearbeitet, aber wenn es nur darum geht, dass es vor dem eigentlichen Output passieren soll, würde ich es nach folgendem PseudoCode machen:
Code:
Session starten
WENN cookie gesetzt
  Cookie auslesen und Farbe in Variable speichern (um später die richtige css aufzurufen)
SONST
  WENN farbwahl übergeben (z.b. aus einem Formular)
    Farbwahl im Cookie speichern
  SONST
    Standardfarbe im Cookie speichern
Sonstige Ausgabe
 
PHP:
if(!$colorValue = $_COOKIE['color']) # Versucht $colorValue auf den Wert des Cookies zeigen zu lassen, wenn der cookie nicht gesetz ist gehts in die Klammer.
{
    $colorValue = $_SESSION['color']; # Setzt $colorValue auf den Sessionwert
    setcookie('color',$colorVar); # Setzt den Cookie
}

Bitte

Aso und du kannst einen Cookie nicht einfach wie eine Variable handhaben, das ist doch eigentlich klar.

Warte ma auch noch ne Beschreibung.
 
Zuletzt bearbeitet:
Hey Danke,
das hat funktioniert. Super, ich kann dann danach auch direkt 2 Variablen speichern, bzw. ein Array. Ich verstehe nur nicht was ich falsch gemacht habe, da ich vor dem setzen des Cookies nichts an HTML ausgeben lassen, da Cookies ja in dem Header mit gesendet werden.
Aber ich bin froh das es funktioniert ;)
Danke.

Ich hätte da noch eine klitze kleine Frage, die gehört aber nicht hier rein. Wenn ich ein PHP Dokument in einem anderen Includiere, dann zeigt der mir die Umlaute als Raute mit einem Fragezeichen drin an. Woran liegt das und kann ich das irgendwie verändern?
 
Ja ok, hab ich gemacht, geht auch, war ganz einfach ;)
Ich bin aber wiederum auf ein neues Problem gestoßen. Und zwar ist das die Funktion unset().
Ich möchte die eingabe eines Formulars per POST übergeben, der Inhalt von POST wird dann in der SESSION gespeichert. Danach möchte ich den Inhalt von POST löschen
PHP:
unset($_POST['variable']);
Dann wird ein Popup aufgerufen. Die übergabe der SESSION Variablen funktioniert auch Prima, ich übergeb die SESSION Variablen in lokale Variablen und will die SESSION Variablen leeren, ebenfalls wieder mit unset(). Grund ist einfach, das ich abfrage ob die POST Variablen gesetzt sind und dann wird das Popup geöffnet. Eigentlich sollten die Variablen dann nicht mehr existieren, bzw leer sein, trotzdem stehen diese noch weiter da. Wenn ich F5 drücke wird das Popup also wieder aufgerufen und das soll nicht sein und rein logisch betrachtet sollte sich das mit meinem Code auch nicht mehr öffnen, tut es aber!
Hat da jemand eine Lösung für mich?
 
Wenn du F5 drückst und bei dem Aufruf der Seite POST Daten übermittelt hast, dann werden die beim aktualisieren erneut geschickt. Ob dein Script die danach wieder löscht oder nicht ist irrelevant, da der Browser sie sich halt im Verlauf gemerkt hat. Wenn du stattdessen aber einen Link anklickst und damit nicht erneut POST befüllst, sollte es den von dir gewünschten Effekt erzielen.
 
Hallo nochmal,
nach langem hin und her programmieren haben sich noch ein paar fehler auf getan.
und zwar:

Nr.1:
Wie kann ich eine session NUR an eine Webseite anhängen? Ich habe ein etwas älteres Projekt und ein neues. Wenn ich mich im alten Projekt anmelde und dann ins neue wechsel übernimmt der teilweise die Variablen, weil es halt die gleiche session ist.
Wie müsste ich da vorgehen, damit ich nicht, z.B. mit anderen Projekten kollidiere. Bzw. kann ja auch jemand anderes mal auf gut glück die Variablen auslesen, die sind ja global gesetzt. z.B. beim Login. Wenn ich mich bei dem alten Projekt angemeldet habe, war der username gesetzt und somit komme ich auch in mein neues Projekt rein und könnte z.B. Datenbanken leer machen oder ändern, ohne das ich dazu die erlabnis habe.

Nr2.:
Ich habe eine variable und 4+ array's die ich in meinem Cookie speichern möchte. Arrays kann ich aber nicht speichern, gibt es da eine andere Möglichkeit? Wäre es von Vorteil, alle Arrays und Variablen in einen String zu speichern und nur diesen einen String zu speichern?
Wäre super, wenn mir dazu jemand mal ein paar Tipps geben könnte, bzw. auch Vor- und Nachteile.

Vielen Dank im voraus
 
Zurück