Problem mit Session

tiescher

tiescher

Aktives Mitglied
Thread Starter
Dabei seit
03.11.2003
Beiträge
217
Reaktionspunkte
1
Hi Leute,

ich habe folgendes Problem: Ein Käufer wird von PayPal zurück auf meine Seite gelinkt. Dann wird per PDT (falls das jemandem was sagt) überprüft, ob seine Transaktionsdaten in Ordnung sind. Sollte dies der Fall sein, passiert folgendes:

$_SESSION["user"] = $keyarray['payer_email'];

Dann wird ein Link angeboten auf die Datei download.php

Dort passiert das hier:

<?php
// check if user is authorized for Download
session_start();
if(isset($_SESSION["user"]))
{
// send http-headers to browser
header("Content-type: application/pdf");
header("Content-Disposition: attachment; filename=sampl_dict.pdf");
readfile('files/tsd.pdf');
}
else
{
echo "You are not allowed to access this page!";
}
?>

Ds Problem ist, dass ich immer in den else-Zweig komme, obwohl ja die Session-Variable gesetzt wurde. Woran liegt es, dass er nicht erkennt, dass die Session-Variable "user" korrekt gesetzt wurde?

HIIILFE!

Danke schon mal...
tiescher
 
Versuchs doch mal mit

PHP:
if ($_SESSION['user'] && $_SESSION['user']!="")
{
 ...
}
 
Danke für die schnelle Antwort, aber hat leider nix gebracht.
Was wolltest Du damit bezwecken?

Hat das vielleicht irgendwas mit zuvor gesendeten HTTP-Headern zu tun, dass er die Session nicht mehr starten kann? Keine Ahnung. Irgendwie alles sehr seltsam.

Hast Du noch ne Idee?

Thanx
tiescher
 
Die Frage ist, ob Deine Session noch existiert, richtig? Wenn Du vorübergehend Deine URL verläßt, kann es sein das Du eine neue SESSION-ID bekommst ( muß aber nicht). Mit dem weglassen von isset wollte ich nur eine Fehlerquelle ausschlißen ( hätt ja sein können, das isset bei superglobals nicht funktioniert). Gib doch mal

print_r($_SESSION)

aus. Steht in der Session überhaupt was drinnen?

spannend ist auch ob in

$keyarray['payer_email'];

ein Wert enthalten ist, also auch hier mit print_r mal ausgeben!
 
Zuletzt bearbeitet:
Dann wird ein Link angeboten auf die Datei download.php
Ist auf dieser Seite, auf der auch der Link angeboten wird, die Session vorhanden? Lass Dir nach dem Schreiben von $_SESSION["user"] mal ein print_r von $_SESSION ausgeben.

Ich hatte letztens auch ein Problem mit Session-Variablen auf einem bestimmen Server (PHP 4.3.11). Dort musste ich die Variablen explizit mit session_register() anlegen, sonst wurden Sie nicht übernommen. Versuch das auch mal.
 
Jo also $keyarray['payer_email'] ist gesetzt. Wenn ich die Session ausgebe nachdem ich sie gesetzt habe ist alles korrekt.

Ob die in dem Download Script noch da ist probier ich gleich mal.

Bis gleich

tiescher
 
Also Leute jetzt hab ichs getestet.

Auf der Seite auf der der Link angeboten wird krieg ich folgendes:

Array ( [user] => blabla@nowhere.com )

Auf der Download Seite aber kommt nur das hier:

Array ( ) You are not allowed to access this page!

Also kommt wohl die Session gar nicht rüber.

Warum nicht?

thanx
tiescher
 
Ehrlich gesagt, wollte ich das vermeiden. Dazu muss doch in der php.ini register_globals ON sein und da wird einem ja überall davon abgeraten. Andererseits fällt mir jetzt auch keine andere Lösung ein. Dir vielleicht?

Ich glaub ich probiers jetzt einfach mal...

Meld mich gleich nochmal...


Verdammter Mist!

Jetzt hab ichs versucht dann kam folgendes als Fehler:

Warning: session_register(): Cannot send session cache limiter - headers already sent

Is mir auch klar warum: session_register() ruft implizit session_start() auf.
Aber der Ort an dem der Befehl ausgeführt wird ist included, d.h. ich hab vorher schon etwas ausgegeben. Dann funktioniert session_start() und damit auch session_register() nicht mehr. Mist was jetzt? Fällt Euch noch was ein?

Thanx
tiescher
 
Zuletzt bearbeitet:
session_register ist auch deprecated und sollte unnötig sein beizeiten!

interessant ist doch:

Array ( ) You are not allowed to access this page!

Das Session-Array ist also leer und es gibt ein Rechteproblem. Vielleicht prüfst Du nochmal die Zugriffsrechte auf die Datei? Ist es das?
 
Meinst Du die Zugriffsrechte auf die download.php?
Wenn ja, wie müssten die aussehen?

Vielleicht sollte ich noch sagen, dass die download.php in einem anderen Verzeichnis liegt, als die Datei, die die Session-Variable setzt. Das dürfte aber eigentlich doch nichts ausmachen, da Session-Variablen eigentlich, wenn Sie denn mal funktionieren, überall verfügbar sind solange der Browser geöffnet ist. Ich habe schon oft mit Sessions gearbeitet und noch nie ein derartiges Problem gehabt.

Danke schon mal für Eure Hilfe. Des werden wir doch irgendwie hinbekommen, oder?

Thanx
tiescher
 
Du musst bei jedem "neuen" Skript-Aufruf die Session auch einleiten mit
PHP:
session_start ();
// und nu kommt der Rest...

Habe ich das bislang überlesen? Sonst würde es fehlen ;)

[Edit] Ok. Ich hab's überlesen. Hmpf. Andere Möglichkeit, hat Deine Sitzung vielleicht einen Namen, den es vor session_start() noch zu setzen gilt?

HoffeDasHilft.
 
Zuletzt bearbeitet:
Gibst Du die Session-ID überhaupt weiter? Oder nutzt Du Cookies für die Session?
 
wegus schrieb:
session_register ist auch deprecated und sollte unnötig sein beizeiten!
Ist mir schon klar. Aber wie gesagt war es bei einer ziemlich akutellen PHP-Version nicht möglich ohne session_register eine Variable in der Session abzulegen. Ich hab stundenlang rumprobiert bis ich endlich diese Lösung hatte.

Die Seite auf die weitergeleitet wird liegt nicht zufällig auf einer (anderen) Subdomain? Z.B. http://downloads.deine-url.tld...

Auch www wird hier als Subdomain gewertet. Wenn also eine Seite http://deine-domain.tld und die andere Seite http://www.deine-domain.tld ist, ist die Session nicht verfügbar.
 
Danke für Eure Posts, aber irgendwie haut das immer noch nicht hin.

Die Download Datei liegt auch nicht auf einer anderen Doman oder so, sondern nur ein paar Verzichnisse über dem Skript, dass die Session-Variable setzt.

@Yankee:ich hab jetzt mal zum testen die Session-Id folgendermaßen mit übergeben:
$dlLink = "download.php?".session_name()."=".session_id();
Und dann $dlLink an passender Stelle (HREF) eingesetzt.
In der Statusleiste des Browsers sehe ich, dass die Session-Id leer ist, also
"blablabla/download.php?PHPSESSID="

Ich habe auch die Rechte für die temporären Session-Dateien auf dem Webserver per chmod auf 777 gesetzt. Trotzdem nix.

So langsam bin ich echt ratlos. Weiß jemand von Euch noch was?

Thanx
tiescher
 
Zuletzt bearbeitet:
Tritt denn das Problem einzig und allein auf dieser Seite auf, oder ist es ein generelles Problem mit Sessions auf dem Rechner?
 
Kann ich schwer sagen, da das die einzige Stelle auf der gesamten Site ist, bei der Session ins Spiel kommen. Ausserdem kann ich das nicht lokal testen, da ich für den PayPal-Prozess, der passiert bevor die Session Variable gesetzt wird die Sache leider online testen muss. Mir is aber noch nie etwas derartiges untergekommen. Fällt Dir noch was ein, woran es liegen könnte?

[EDIT]: So jetzt hab ichs gefixed! Ich hatte vor lauter Verzweiflung vergessen den Browser zu schliessen, nachdem ich die Zugriffsrechte für das Temp-Verzeichnis geändert hatte. Die alte Session ist ja erst weg wenn z.B. der Browser zu ist. Sorry. Jetzt gibt´s aber ein anderes Problem
"Cannot modify header information - headers already sent" und zwar in Bezug auf die Ausgabe der http-Header und nicht von session_start. So ein Mist. Mal sehen was ich tun kann, Help is more than welcome...

Danke an alle
tiescher
 
Zuletzt bearbeitet:
Hey Yankee,

bin inzwischen schon von selbst draufgekommen, aber genau das war das Problem. Ein Beweis für deine Kompetenz :D
Man muss die halt die Ausgabe puffern, das war das ganze Geheimnis!

Ich danke Euch allen für Eure Mithlife.

Verneig
tiescher
 
Zurück
Oben Unten