Cookie setzen nicht

Einmal etwas Grundlegendes:
Wenn Du eine Session mittels session_start() beginnst, bzw. wieder aufrufst und die Variablen im superglobalen Session-Array ($_SESSION) speicherst, dann kümmert sich PHP schon von allein um das Übertragen der Session-ID. Es wird zunächst versucht die Session-ID in einem Cookie auf dem Client-Rechner abzulegen. Hat der Benutzer die Cookies deaktiviert, so wird die Session-ID automatisch an alle relativen Links angefügt. D.h. Du musst ´keine Session-Daten manuell in einem Cookie ablegen.

Hier die prinzipielle Verfahrensweise:
PHP:
<?php
  // Das hier ist datei1.php

  // Session beginnen bzw. wieder aufgreifen
  session_start();
  
  $_SESSION['varname'] = 'wert'; // Daten in einer Session speichern
  
  echo '<a href="datei2.php">klick</a>';
?>

<?php
  // Das hier ist datei2.php

  // Session beginnen bzw. wieder aufgreifen
  session_start();

  echo $_SESSION['varname']; // Daten aus einer Session auslesen
?>

Mehr benötigst Du also nicht. Wird eine Variable dem Session-Array ($_SESSION) hinzugefügt, so wird sie automatisch nach Ablauf des Scriptes serialisiert und auf dem Server abgelegt.

Möchtest Du die Session dauerhaft beenden, weil zum Beispiel der Benutzer zich ausloggen möchte, dann kannst Du die Session mittels session_destroy() und session_unset() leeren und "zerstören".

Hast Du noch Fragen (oder auch nicht), dann belies Dich bitte dazu auf http://de.php.net/manual/de/ref.session.php.

mfg, snuu
 
Zuletzt bearbeitet:
Ähhmmm, ja, doch....

Also, ich wollte zum THema Sessions eigentlich nix wissen, da die alles wunderbar klappt.

Das einzige, was nicht klappt, ist das anlegen von Cookies, damit der User sich automatisch auch wieder einloggt, nachdem er den Browser geschlossen hat
 
Richtig! Und was ich Dir mit diesem Beitrag sagen wollte ist, dass das Session-Handling von PHP automatisch Cookies verwendet, wenn dies der Client-Browser zulässt. Du musst also nicht "manuell" mit Cookies arbeiten, um die Session wieder aufnehmen zu können.

Meinen zuvor geposteten Link solltest Du Dir dennoch zu Gemüte führen, denn laut diesem Code ist das notwendig:
$_SESSION["user_id"] = $id;
$_SESSION["user_nick"] = $_POST['uname'];
session_register("user_id");
session_register("user_nick");

snuu
 
*HEUL*

Das Problem ist aber, das wenn man den Brwoser schließt, alle Sessions gelöscht werden. Genau das möchte ich durch die Cookies verhindern
 
Jetzt sind wir wieder an dem Punkt angelangt, über den ich mich hier im Forum am meisten aufrege. Wenn ich Links zu Dokumentationen oder Funktionsreferenzen poste, dann werden diese meistens gar nicht beachtet. Hättest Du dir die Seite http://de.php.net/manual/de/ref.session.php genauer angesehen, so wärst Du auf folgende 2 Punkte gestoßen:

1/ session.cache_limiter steht standardmäßig auf "nocache", so dass eine clientseitige Speicherung der Session nicht erlaubt ist. Stellt man diese auf "private", dürfen Clients, aber keine Proxies Daten zwischenspeichern.

2/ session.cache_expire steht standardmäßig auf 0, so dass die Session beim Schließen des Browsers verfällt.

Fazit: um nun die Session länger auf dem Client zu speichern, musst Du folgenden Code verwenden:
PHP:
session_cache_limiter('private'); // Siehe obere Beschreibung (Punkt 1)
session_set_cookie_params(180); // Setzt die Cookie-Verfallszeit auf 180 Sekunden
session_start(); // Erst danach die Session starten, da sonst die Einstelllungen wirkungslos wären

Jetzt kannst Du über das Session-Array ($_SESSION) Deine Session-Variablen verwalten.

snuu
 
hi zusammen,
bin auch grade dabei an sowas zu denken.
habe das mit der ( session-variable) getestet und muss sagen das beispiel haut supi hin.
nur habe ich da noch eine kleine frage : warum session und nicht cooki ?
vorteile von session-var oder vorteil der cooki´s bzw. nachteile :rolleyes:

bye
bossi
 
Zurück