Ruud: $_Session: Was ist hier falsch?

Hallo,

ich habe ein Problem mit php-Sessions. Ich möchte im Hauptscript auf eine zuvor festgelegte Variable zugreifen, aber die ist leer.

Hier das Dateienkonstrukt mit den entscheidenden Auszügen (hoffe ich):
----------------
---->  login-script:

include("./config/session.inc");
header("Location: script.php?SESSID=$PHPSESSID");
exit;
---------------

----->  script.php:

include("./config/header.php");

-----------------------------

----->  header.php

include("./config/session.inc");
echo('<p>Test: '.($_SESSION['test']).'</p>');

------------------------------

----->  session.inc:

session_start();
$_SESSION['test'] = "tralalala";

-------------------------------------

Wie erreiche ich, daß diese Anweisung (echo('<p>Test: '.($_SESSION['test']).'</p>');) nichtz leer bleibt?

Danke für die Hilfe

Ruud

  1. Hallo,

    überprüfen ob die Session leer ist (isset bzw. empty) und wenn sie leer ist einen Wert zuordnen

    MFG
    Andavos

    --
    http://www.rpgcommunity.de/clanwissen/index.php Webdesign, PHP, Clan-Aufbau und mehr
  2. Moin!

    Hier das Dateienkonstrukt mit den entscheidenden Auszügen (hoffe ich):

    Da ist einiges im Argen...


    ---->  login-script:

    include("./config/session.inc");
    header("Location: script.php?SESSID=$PHPSESSID");

    Punkt 1: Eine Location-Angabe erfordert zwingend eine komplette URL-Angabe, keine relative!

    Punkt 2: Es gibt die Konstante SID. Nutze sie! Denn sie enthält die Kombination "Sessionname=sessionid", und das ist genau, was du hier brauchst. Der Session- bzw. Cookiename ist nicht auf "SESSID" festgelegt, sondern je nach Server oder deinen persönlichen Konfigurationen unterschiedlich. Für ein portables Skript also keine fixen Angaben verwenden.

    Punkt 3: $PHPSESSID enthält genau dann den Wert aus der URL ("?PHPSESSID=eine_id"), wenn register_globals auf on ist. Das wird aber mehr und mehr abgeschafft. Und ist also ein weiterer Grund für "SID".

    Punkt 4: Wenn deine Session-ID tatsächlich in $PHPSESSID drinsteht, ist die Parameterangabe "SESSID=$PHPSESSID" sowieso falsch, weil es "PHPSESSID=$PHPSESSID" heißen müßte. Aber ich sagte ja schon: Nimm die Konstante SID.

    exit;

    ----->  script.php:

    include("./config/header.php");


    ----->  header.php

    include("./config/session.inc");
    echo('<p>Test: '.($_SESSION['test']).'</p>');


    ----->  session.inc:

    session_start();
    $_SESSION['test'] = "tralalala";


    Summe der Unterverzeichnisse:
    login-script -> includet ./config/session.inc -> weiter zu script.php

    script.php -> includet ./config/header.php
    header.php -> includet ./config/session.inc

    Und das bedeutet: session.inc ist im Verzeichnis /config/config/. Weil header.php ja schon im Verzeichnis /config/ ist.

    Tipp: Wenn schon includen, dann richtig. Dein Durcheinander ist nicht unbedingt förderlich für die Übersicht. Ich persönlich halte es für nicht so schlau, innerhalb von Includes noch weitere Includes zu haben. Aber wenn, dann müssen zumindest die Pfade stimmen. :)

    - Sven Rautenberg

    --
    "Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)
    1. Hi Sven,

      erstmal vielen Dank, nun läuft es auch :-))

      Zur Session-ID: Ich hab schon alles versucht, die Konstante SID zum laufen zu bringen, aber in keinem Fall wird sie auch angezeigt bzw. übertragen.

      Deshalb nun diese Behelfslösung, die allerdings funktioniert.

      Deshalb nochmal die Nachfrage: Wie löse ich das mit SID so, daß ich den gleichen Effekt habe, wie bei meinem Behelf?

      Grüße

      Ruud

      1. Moin!

        Zur Session-ID: Ich hab schon alles versucht, die Konstante SID zum laufen zu bringen, aber in keinem Fall wird sie auch angezeigt bzw. übertragen.

        Stimmt nicht. SID enthält nur dann Text, wenn das aufgerufene Skript feststellt, dass der Client _kein_ Session-Cookie gesendet hat.

        Damit kriegt man also das optionale, manuelle Anhängen der Session-ID an die Links prima hin: Die ID wird nur dann angehängt, wenn tatsächlich die Notwendigkeit dafür besteht. Werden Cookies akzeptiert, wird _keine_ Session-ID an die Links angehängt, in denen SID verwendet wird.

        Verwende SID. Ist wirklich besser so.

        - Sven Rautenberg

        --
        "Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)
        1. Hi Sven,

          glaube ich Dir ja. Aber ich hatte ja extra die Cookieannahme deaktiviert, um zu sehen, ob die SID angehängt werden würde.
          War aber nicht der Fall.

          Wie würde denn der korrekte Link lauten müssen?

          Grüße

          Ruud

          Verwende SID. Ist wirklich besser so.

          - Sven Rautenberg

          1. Moin!

            glaube ich Dir ja. Aber ich hatte ja extra die Cookieannahme deaktiviert, um zu sehen, ob die SID angehängt werden würde.

            Aber wenn du schon von vorher ein Cookie hast, nützt dir das Deaktivieren nichts. :)

            War aber nicht der Fall.

            Wie würde denn der korrekte Link lauten müssen?

            In der Weiterleitung:

            header('Location: '.(isset($_SERVER['HTTPS'])?'https://':'http://').$_SERVER['HTTP_HOST']."/pfad/zur/seite.html".(SID?"?".SID:''));

            Schlauerweise definiert man sich dafür eine Funktion und läßt dort den "Pfad zur Seite" (absolut angegeben) als Parameter übergeben.

            Alternativ kannst du dir natürlich auch eine Funktion bauen, die aus einer relativen Angabe eine korrekte absolute URL baut.

            - Sven Rautenberg

            --
            "Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)
            1. Hi Sven,

              danke Dir, ich werds mal ausprobieren :-)

              Gruß, Ruud