SebastianJu: Sessionvariable nur auf erstem Dokument verfügbar?

Hallo,

ich wollte das erste mal ein wenig mit Sessions experimentieren aber irgendwie ist die Sessionvariable nur auf der Seite verfügbar auf der die Session gestartet wurde.

Im ersten Dokument steht:

<?php
session_start();
$aID = explode("/",$_SERVER['PHP_SELF']);
$_SESSION['id'] = $aID[1];
?>

Am Ende der Seite steht:

<?php echo $_SESSION["id"]."<br>".$aID[1]."<br>".$_SERVER['PHP_SELF']; ?>

Und die drei Variablen werden auch korrekt ausgegeben.

Aber schon auf der zweiten Seite ergibt:

<?php echo $_SESSION["id"]."<br>".$aID[1]."<br>".$_SERVER['PHP_SELF']; ?>

nur noch beim letzten Wert ein Ergebnis. Egal ob am Anfang des zweiten Dokuments ein session_start(); steht oder nicht.

Wie kommt das? Beides sind php-Dateien. Fehlt da noch etwas?

Grüße!
Sebastian

PS: Muss man die Session eigentlich wieder löschen? Wenn ich die Seite mit Session_Start ein paar mal aufrufe sammeln sich die Cookies an. Das merke ich wenn ich mit dem Webdeveloper die Sessioncookies lösche.

  1. Weiß niemand wo das Problem liegt/liegen könnte?

    Grüße!
    Sebastian

  2. Ok, ich habe ein wenig mit dem Web Developer experimentiert und habe gesehen dass auf der zweiten Seite ein neuer Cookie gesetzt wurde. Nur weil die URL von domain.de zu www.domain.de sich änderte wie mir scheint.
    Ich werde mal schauen wie man das umgeht. Bleibt ja eine Domain also muss auch die Session die selbe bleiben...

    Grüße!
    Sebastian

  3. Lösung:
    Eine Session wird immer nur für eine Domain erstellt. Subdomains werden nicht beachtet. Das heißt wenn jemand auf domain.de kommt und dort eine Session gestartet wird und dann auf einen Link geht der auf www.domain.de leitet dann ist die Session dort nicht mehr gültig.
    Schon heftig dass das nicht mal für www. gilt. Das bedeutet in der Praxis sicherlich viele Sessionabbrüche nur weil die Webmaster dieses Verhalten nicht kennen...

    Nun, der Code um das zu lösen kommt vor den ersten Sessionaufruf und lautet: ini_set("session.cookie_domain",substr($_SERVER[HTTP_HOST],3));

    Damit klappts dann. Im zweiten Teil muss einfach .domain.de stehen. Damit werden die Subdomains abgedeckt. Im Beispielfall aus der Servervariable geholt...

    Grüße!
    Sebastian

  4. Finde ich klasse, daß Du Deine Erkenntnisse mitteilst. Auf dieses Problem wäre ich auch bald gestoßen, und bin schon ein bißchen schlauer, bevor ich überhaupt anfange.

    Viel Erfolg weiterhin wünscht Paeonia