SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

TYPO3 Kochbuch

TYPO3 Kochbuch zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 20.07.2005, 19:07:11
Don Stefano Don Stefano ist offline
Anfänger
 
Registriert seit: Feb 2005
Beiträge: 40
Session Warnung

Hallo zusammen!

Als ich gerade dachte, meine Skripte laufen endlich auf meinem gemieteten Webspeicherplatz sehe ich mich mit einem neuen Problem konfrontiert.

Ich verwende Sessions um Daten zu transportieren und angemeldete User zu überprüfen.

Nun gibt mir ein Skript (und ich weiß nicht mal genau welches) die folgende Warung aus:

Zitat:
Warning: Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown online 0
Ich habe schon recherchiert, dass dies wohl an der Einstellung register_globals = off bei meinem Webserver liegt. Auf diese Einstellung habe ich keinerlei Einfluss.

Ich weiß nicht einmal ob diese Warnung durch den wiederholten Befehl
Zitat:
session_start();
zustande kommt oder dadurch, dass Parameter in Form von
PHP-Code:
 $ergebnis $_SESSION["ergebnis"]; 
übergeben werden.

Was kann ich denn nur tun, damit dieser Fehler verschwindet? Er taucht übrigens auch nur bei manchen Skripten auf und nicht bei allen. Außerdem scheint es eigentlich zu funktionieren. Ich bin mal wieder ratlos.

Es kann ja wohl nicht sein, dass ich mit PHP5 und Mysql 4.1 keine Sessions auf dem Server verwenden kann, nur weil register_globals auf off steht, oder ?

Zumal es ja mit einigen Seiten auch klappt, und eben mit einigen diese Meldung ausgegeben wird.

Ich habe mir natürlich auch schon unter php.net zu Seesions einiges durchgelesen und zwar zu Session Funktionen und session_register.
Dort steht zum Beispiel:

Zitat:
Anmerkung: Bitte beachten Sie beim Arbeiten mit Sessions, dass der Datensatz einer Session nicht angelegt wird, bevor eine Variable mit der Funktion session_register() registriert oder dem superglobalen Array $_SESSION ein neuer Schlüssel hinzugefügt wird. Das gilt auch dann, wenn eine Session mit der Funktion session_start() gestartet wurde.
oder unter session_register:

Zitat:
Wenn Sie wollen, dass ihr Script unabhängig von der Einstellung von register_globals funktioniert, müssen Sie stattdessen das Array $_SESSION verwenden, weil $_SESSION-Einträge automatisch registriert werden. Wenn Sie in Ihrem Script session_register() verwenden, funktioniert es nicht in Umgebungen, in denen die PHP-Anweisung register_globals deaktiviert ist.
Ich verwende aber doch $_Session in Form von z.B.

PHP-Code:
 $ergebnis $_SESSION["ergebnis"]; 
Und ich verwende nirgendwo session_register (). Ich verstehe leider nach wie vor nicht wie ich dieses Problem lösen kann. Ich bin auch leider kein Profi.

Wer ist so nett und kann mir helfen?
Mit Zitat antworten
  #2  
Alt 20.07.2005, 20:43:28
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: Session Warnung

Bist du sicher, dass du wirklich an keiner Stelle in deinen Scripten session_reigster() verwendest?
Mit Zitat antworten
  #3  
Alt 20.07.2005, 21:44:27
Don Stefano Don Stefano ist offline
Anfänger
 
Registriert seit: Feb 2005
Beiträge: 40
AW: Session Warnung

Absolut sicher. Lediglich Session_start().

Ich habe aber gerade mit dem Support telefoniert und die konnten nun nur für mich die Einstellung register_globals = off auf on setzen.

Wenn ich das richtig verstanden habe mit einem Tool oder einer Datei namens htaccess das die Einstellungen nur für mich ändert.

Was genau ist dieses htaccess denn ?

Jedenfalls sind seit dem die Fehlermeldungen wieder verschwunden (zumindest diese ;-)

Mit den restlichen werde ich aber hoffentlich alleine fertig.

Danke und viele Grüße
Stefan
Mit Zitat antworten
  #4  
Alt 21.07.2005, 07:25:09
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 76
Beiträge: 4.001
AW: Session Warnung

Zitat:
Zitat von Don Stefano
Ich habe aber gerade mit dem Support telefoniert und die konnten nun nur für mich die Einstellung register_globals = off auf on setzen.
Das war der falsche Weg.

Die Warnung basiert darauf:
Zitat:
session.bug_compat_42 boolean
Die PHP-Versionen bis 4.2.0 haben eine undokumentierte Funktion/einen undokumentierten Fehler, der es Ihnen gestattet, eine Session-Variable im globalen Bereich zu initialisieren, obwohl register_globals deaktiviert ist. Ab Version 4.3.0 gibt PHP bei Verwendung dieser Funktion eine Warnung aus, wenn zusätzlich session.bug_compat_warn aktiviert ist.
Auslöser ist die Zeile:
PHP-Code:
$ergebnis $_SESSION["ergebnis"]; 
weil dadurch eine Sessionvariable im globalen Bereich initialisiert wird:
Session index == varname

So würde die Fehlermeldung unterbleiben:
PHP-Code:
$ergebnis $_SESSION["s_ergebnis"]; 
Session index <> varname

Eigentlich isses sinnfrei: warum verdoppelst Du die Quelle? $_SESSION verhält sich genauso wie jedes 'normale' Array. Die beiden Unterschiede:
1. ist es superglobal (also automatisch innerhalb von Funktionen und Methoden gültig)
2. wird es bei Scriptende in serialisierter Form im Sessionfile gespeichert.

Und nachdem Du register_globals = On gesetzt hast, ist sie ebenfalls überflüssig, weil PHP nach session_start() alle Indexe der Arrays $_GET, $_POST, $_COOKIE, $_FILES und $_SESSION in den globalen Bereich exportiert werden.

Zitat:
Jedenfalls sind seit dem die Fehlermeldungen wieder verschwunden (zumindest diese ;-)
Warnungen sind keine Fehlermeldungen. Es sind Hinweise auf eine fehlerhafte Konfiguration

Die Lösung wäre:
.htaccess
Code:
php_flag session.bug_compat_42 Off
php_flag session.bug_compat_warn Off
php_flag register_globals Off
Ich rate Dir dringend, register_globals auf Off zu stellen und die beiden anderen Flags ebenfalls, da Du ja sicher kein PHP < 4.3.x verwendest.

Was nämlich sonst passieren kann, kannst Du Dir an diesem Onlinebeispiel angucken (Quellteste werden angezeigt):
http://test.php-help.info/session-7/

Nach dem Klick auf 'Klick' wird auf der Folgeseite die Variable $abc auf 'Seite 3' gesetzt, aber nach session_start() durch den in der Session befindlichen Wert von der Startseite überschrieben.

Hier das selbe Script mit register_globals = Off:
http://test.php-help.info/session-7.1/

HIer abschließend noch ein Beispielscript für den Umgang mit Session:
http://test.php-help.info/session-1/

Geändert von meikel (†) (21.07.2005 um 07:27:35 Uhr)
Mit Zitat antworten
  #5  
Alt 21.07.2005, 23:40:50
Don Stefano Don Stefano ist offline
Anfänger
 
Registriert seit: Feb 2005
Beiträge: 40
AW: Session Warnung

Zuerst einnmal Dankeschön an meikel für die Aufklärung. Leider habe ich aber mal wieder nur die Hälfte verstanden und versuche mal zu resumieren:

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?

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 ?

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.

Wenn ich das richtig verstehe würde dann die Fehlermeldung ausbleiben. Sie würde aber doch auch ausbleiben, wenn ich den Code der Session-Variablen-Initialisierung ändern würde. Habe ich das richtig verstanden?

Oder müßte beides zusammen geändert werden? Wenn ja warum ?


Zitat:
Ich rate Dir dringend, register_globals auf Off zu stellen und die beiden anderen Flags ebenfalls, da Du ja sicher kein PHP < 4.3.x verwendest.
Das stimmt soweit, ich verwende php5 und mysql 4.1.


Zitat:
Was nämlich sonst passieren kann, kannst Du Dir an diesem Onlinebeispiel angucken (Quellteste werden angezeigt):
Das habe ich leider nicht richtig verstanden. Heißt das, ich kann den Wert einer Session Variablen dann nicht mehr verändern, wenn er erst einmal in der Session definiert wurde, oder was sollen mir diese Beispiele sagen?
Ich verstehe es ansonsten wohl leider wirklich nicht.

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.

Diese Werte werden auch teilweise innerhalb einer Session überschrieben, z.B. wenn der Code abgearbeitet ist, und der User einen anderen Link betätigt, ist der Wert der Variable "ID" dann anders und wird wieder als $ID = $_SESSION["ID"] initialisiert. Bislang funktionierte das immer einwandfrei und ich hatte keine Probleme.

Ich weiß also einfahc nciht warum ich nun die globals wieder of schalten sollte und meinen Code ändern, wo doch auch so alles funktioniert. Oder ich verstehe das Problem einfach nicht.

Trotzdem vielen Dank für den Beitrag! Vielleicht kannst Du es mir "für Dumme" noch einmal erläutern?

Viele Grüße
Don
Mit Zitat antworten
  #6  
Alt 24.07.2005, 08:00:20
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 76
Beiträge: 4.001
AW: Session Warnung

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>

Geändert von meikel (†) (24.07.2005 um 08:02:40 Uhr)
Mit Zitat antworten
  #7  
Alt 03.08.2005, 01:38:42
Don Stefano Don Stefano ist offline
Anfänger
 
Registriert seit: Feb 2005
Beiträge: 40
AW: Session Warnung

Hallo Meikel,

entschuldige bitte, dass ich mich erst jetzt für den neuerlichen Beitrag bedanke aber ich war einige Tage unterwegs.

Ich werde mich der Sache, sobald ich Zeit dazu habe annehmen und die Skripte entsprechend korrigieren.

Vielen Dank!
__________________
Viele Grüße
Stefan
http://profilingportal.de

Geändert von Don Stefano (03.08.2005 um 01:51:55 Uhr) Grund: Korrektur
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Session Problem mare26 PHP für Fortgeschrittene und Experten 1 08.12.2004 14:30:39
Session verliert sich auf zweiter Seite CyberAge PHP für Fortgeschrittene und Experten 5 10.06.2004 11:48:43
Session Probleme CounterStar PHP für Fortgeschrittene und Experten 1 09.04.2004 23:55:23
SESSION daten gehen leider nicht verloren! - wennd as fenster geschlossen wird Phil PHP für Fortgeschrittene und Experten 3 31.03.2004 14:08:33
session überprüfen... Xantos PHP für Fortgeschrittene und Experten 4 21.05.2002 11:54:50


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:55:23 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt