Zitat:
Zitat von Don Stefano
PHP-Code:
$variable = $_SESSION["varibale"];
initialisiert die Variable im globalen Bereich.
PHP-Code:
$variable = $_SESSION["s_variable"];
hingegen im superglobalen Bereich (?) Wo ist der Unterschied zwischen global und superglobal?
|
Die Variable $_SESSION ist superglobal. Das bedeutet, daß Du ua. diese Variable in Funktionen und Methoden nicht via global bekannt machen mußt.
Der globale Namensraum ist (wie soll mans beschreiben) das Hauptprogramm. Also der Teil, in dem PHP zu arbeiten anfängt.
Sieh es mal so:
PHP ist eine Sprache, die wächst. Zwischen der Version 4.1 und 4.2 trat ein Bug im Zusammenhang mit Sessions auf. Scripten, die auf dem Bug basierten, wurde ab v4.3 mit den beiden Config Flags begegnet, die man aber ausknipsen kann, wenn man ordentlich programmieren will.
Sieh Dir mal da meine Config an:
http://test.php-help.info/phpinfo.php
Hier sind Teile der 1. Tabelle und Teile der Sessions Tabelle interessant.
Zitat:
Wenn alles so bleiben würde auf meinem Server wie zuvor (globals = off) würde diese Änderung des Codes das Problem mit den Warnungen bereits beheben ? Das wäre alles ?
|
Wenn Du weißt, was register_globals = Off bewirkt, solltest Du die beiden "Bug Flags" ausknipsen.
Du solltest auch daran denken, daß sowas Quark ist:
PHP-Code:
$a = $_SESSION['a'];
$a = $a + $irgend_was;
weil das einfacher ist:
PHP-Code:
$_SESSION['a'] += $irgend_was;
Zitat:
Oder müßte dafür auch php_flag session.bug_compat_42 Off php_flag session.bug_compat_warn Off mittels htaccess geändert werden.
|
Jou. (s.o.)
register_globals = Off
die beiden Flags ebenfalls.
Dann ist "sauberes Programmieren" keine Kunst mehr.
Zitat:
Wenn ich das richtig verstehe würde dann die Fehlermeldung ausbleiben.
|
Das sind keine Fehlermeldungen sondern Warnungen, die genau dann auftreten, wenn Du folgendes tipperst:
PHP-Code:
$index = $_SESSION['index'];
register_globals = On erledigt das selbe nach session_start(). Und genau das ist eine Quelle bösartigster Fehler, nach denen man sich 'nen Wolf sucht, weil dann ggf. Formularvariablen nach session_start gnadenlos mit altem Zeuch aus der Session überschrieben werden, wenn die Formularvariable einen gleichnamigen Index in $_SESSION besitzt.
Zitat:
Sie würde aber doch auch ausbleiben, wenn ich den Code der Session-Variablen-Initialisierung ändern würde. Habe ich das richtig verstanden?
|
Versuche den Mechanismus zu verstehen:
register_globals = Off
konsequente Trennung im globalen Namensraum. Alle Formularvariablen landen in GET, COOKIE oder POST bzw. REQUEST. Die Sessionvariablen bleiben in SESSION.
=> bequemes Arbeiten
register_globals = On
keine Trennung mehr, weil $_GET, $_POST, $_COOKIE, $_REQUEST, $_FILES, $_SESSION und Teile von $_SERVER und $_ENV in den globalen Namensraum gemüllt werden.
PHP achtet bei den beiden Flags darauf, wenn ein SESSION Index in eine gleichnamige Variable in Global dupliziert wird und warnt dann. Warum davor gewarnt wird, wenn man es richtig macht (register_globals = Off), wissen die Götter oder derjenige, der den PHP Göttern den Stoff verkauft hat. <ggg>
Zitat:
Bei mir landen in den Session Variablen z.B. die Werte "Login" oder eine "ID", die auf einer nächsten Seite einen bestimmten Codeteil auslöst.
|
Hier meine Auth-Klasse mal zur Ansicht.
PHP4
http://test.php-help.info/auth-4/
PHP5
http://test.php-help.info/auth-3/
Gucks Dir an und versuch das Prinzip zu verstehen. Das Teil ist sehr pflegeleicht, obwohl bestimmt ein paar Schönheitsfehler noch vorhanden sind.
Zitat:
Trotzdem vielen Dank für den Beitrag! Vielleicht kannst Du es mir "für Dumme" noch einmal erläutern?
|
Einspruch: wenn ich der Meinung wäre, Du wärst dumm, würde ich mir ganz gewiß nicht die Arbeit machen, tonnenweise Hinweise zu tippern. <ggg>