$_Session: Was ist hier falsch?
Ruud
- php
0 Andavos0 Sven Rautenberg0 Ruud0 Sven Rautenberg0 Ruud0 Sven Rautenberg0 Ruud
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
Hallo,
überprüfen ob die Session leer ist (isset bzw. empty) und wenn sie leer ist einen Wert zuordnen
MFG
Andavos
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
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
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
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
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
Hi Sven,
danke Dir, ich werds mal ausprobieren :-)
Gruß, Ruud