Einzelnen Beitrag anzeigen
  #8  
Alt 25.04.2012, 15:17:49
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: SESSION-Variablen sind leer

Zitat:
Zitat von Re-Z Beitrag anzeigen
Es ist nicht so, das ich auf eine Fehlerausgabe verzichte, ganz im Gegenteil, ich nutze Exception-Classes.
Wenn diese Klasse Dich nicht auf nicht initialisierte Variable hinweist, kannste den Kram in die Tonne latschen.

Zitat:
Die register_globals, open_basedir und session.save_path sind korrekt gesetzt.
Wenn Du meinst...

Zitat:
An sowas:
PHP-Code:
<?php session_start(); ?>
<?php
scheitert der Header nicht, das wird großzügig toleriert.
Das wäre ein Bug, weil sich der Zeilenumbruch außerhalb der PHP Tags befindet. Der HTTP Header wird nach der ersten Leerzeile beendet und der Rest rangiert unter Body. Dem Apachen ist sowas Wurscht, weil der eh nur Text liefert. Offenbar toleriert Dein Browser solchen Mist.

Zitat:
session_write_close() ist meines Erachtens nicht zwingend notwendig.
Führt zwar zu einem besseren Stil und ergibt auch Sinn, ist aber kei muss.
Da es in der Vergangenheit PHP Versionen gab, die bei vorzeitigen Abbruch das Session file nicht komplettierten, war diese Funktion kriegsentscheidend. Und da ich faul bin, rufe ich diese Funktion auf, weil es für geregelte Verhältnisse sorgt.

Zitat:
Nur weil der Header keine absolute URL hat, bedeutet das nicht, das die
SESSION-Variablen leer sind.
Nö.
Zitat:
HTTP/1.1 verlangt einen absoluten URI inklusive dem Schema, Hostnamen und absoluten Pfad als Argument von » Location:, aber manche Clients akzeptieren auch relative URIs. Gewöhnlich können Sie mittels $_SERVER['HTTP_HOST'], $_SERVER['PHP_SELF'] und dirname() aus einem relativen Link einen absoluten URI selbst erstellen:
Daß sowas dem einen oder anderen Browser wohl egal ist, bdeutet noch lange nicht, daß man ungestraft darauf verzichten kann.
Zitat:
Sowas:
PHP-Code:
$vid    getVID($_GET['op_id']); # <--
$lsbnr  $_GET['op_id']; # <--
$verein getAssociationName($vid);

$year       getActualYear();
$yearBefore getYearBefore(getActualYear());

$_SESSION['vid']    = $vid;
$_SESSION['lsbnr']  = $lsbnr;
$_SESSION['verein'] = $verein
ist alles andere als sinnfrei, da das POST mit einem
PHP-Code:
if(isset(...)){...} 
versehen ist.
Falsch. Wenn $_GET['op_id'] nicht existiert, wirft der Aufruf der Funktion ne Warnung alá not defined index op_id. Wäre PHP ein ordentlicher Compiler, gäbs an der Stelle nen Abbruch mit ner Fehlermeldung.

Zitat:
Ebenso ist die Kombination von POST und GET nicht unüblich.
Ja leider. Manche sind so schlampig, bei einem POST Request einen Teil der Variablen an das Action Attribut dranzupappen.

Zitat:
Faktum ist, das ohne die exit-Funktion nach dem Header das Skript trotzdem weiter arbeitet und somit auf Grund der dann fehlenden GET-Variable die SESSION-Variablen mit leerem Inhalt überschreibt.
Fehlerhafte EVA Konstruktion.

Zitat:
Somit verbittet sich, entgegen Deiner Meinung, der Client NICHT jeden weiteren Content.
Das ist browserabhängig. Wenn der Browser im Protokoll nen Location Header bekommt, müßte er dem eigentlich folgen und den restlichen sinnfreien Sums des Servers abweisen, weil es bei diesem Header keinen Body geben darf.

Zitat:
Im Endeffekt hat schlicht und ergreifend das "exit()" gefehlt.
Genau. Mir fehlten allerdings noch die Zeilen, in denen VOR dem Header die Session gefüttert wird.

Mein restlicher Text sind lediglich Tips, sauber zu programmieren. Meine Scripte funktionieren nämlich auch mit error_reporting(-1).
Mit Zitat antworten