• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

session side-effect Fehlermeldung

skizZ

Mitglied
Hallo zusammen,

auf einer Seite meiner Webseite bekomme ich folgende Warnung angezeigt:

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 inUnknown on line 0

Selbst wenn ich den Code auf folgendes verringere:

PHP:
<?[COLOR=#aeb892]if(!isset($_SESSION["userid"]) || $_SESSION["rechte"] != "1"){[/COLOR]
[COLOR=#aeb892]	echo "Diese Seite ist nicht verfügbar";[/COLOR]
[COLOR=#dfc292]} else {[/COLOR]
[COLOR=#aeb892]?>[/COLOR]
[COLOR=#aeb892]<?[/COLOR]
[COLOR=#aeb892]	$sql = mysql_query("SELECT * FROM gewerbe");[/COLOR]
}?>

taucht diese Warnung noch auf. Ich sehe keinen Fehler. Wer kann mir hierbei behilflich sein? =)

viele Grüße
skizZ
 
Werbung:
an dem Code liegt es nicht.
Du arbeitest mit register_global auf on (Horror buaahhhh). Dein Script sollte möglicherweise nicht richtig funktionieren.

2 Möglichkeiten:

1.
Ändere dein Script, dass du mit register_global = off umgehen kannst. Das betrifft meistens Variablen wie $_GET und $_POST, $_SESSION u.s.w die auch so verwendet werden sollten.
Am Anfang deiner Scripte sollte ein session_start() stehen, um die Superglobalen verwenden zu können. ICH RATE ZU DIESER VARIANTE

2.
Nutze am Anfang deines Scripts ini_set() umd session.bug_compat_42 auf OFF zu setzen um dei Fehlermeldung zu eleminieren. sollte dein Script nicht korekt laufen, kann man das mit folgendem parser beheben (ich rate dezitiert ab, aber du musst wissen was du tust)
PHP:
@ini_set('session.bug_compat_42', '0');
@error_reporting(E_ALL & ~E_NOTICE);
session_start();

// ein Horrorcode den ich eigentlich garnicht posten dürfte
// parsen aller Variablen register_global = off
$types_to_register = array('SESSION','GET','POST','COOKIE','SERVER','FILES','ENV','REQUEST');
    foreach ($types_to_register as $global_type)
    {
        $arr = @${'HTTP_'.$global_type.'_VARS'};
        if (@count($arr) > 0) extract($arr, EXTR_OVERWRITE);
        else
        {
            $arr = @${'_'.$global_type};
            if (@count($arr) > 0) extract($arr, EXTR_OVERWRITE);
        }
    }
Das behebt zwar die Fehlermeldung, aber nicht deine wirklichen Probleme.
register_global ist eine gefährliche Einstellung, die nach meiner Auffassung komplett aus PHP eleminiert gehört. Uralt-Scripten wurde es damit leicht gemacht Variablen zu übernehmen und weiter zu verarbeiten. Nachteil: Angreifer konnten damit ganz leicht Code einschleusen.
 
Zuletzt bearbeitet von einem Moderator:
Werbung:
Hallo,

An dein Topic konnte ich mich nicht mehr erinnern =)

natürlich steht register_globals auf OFF und nicht auf ON.

Am Anfang jeder Seite wird die Session mit session_start() entsprechend gestartet. Daran soll es nicht liegen. Dieser Fehler kommt auch nur auf der einen Seiten.

Mit ini_set('session.bug_compat_warn', 0); unterdrücke ich die Anzeige nun, da ich absolut nicht nachvollziehen kann woher das kommt.
 
Ich hab's in dem anderen Thread gepostet.

PHP:
<?php

// Alle Fehlermeldungen anzeigen
error_reporting(-1);

session_start();

$_SESSION['test'] = null;
$test = '';

Conclusion and test results:

You'll get this warning if $_SESSION['var'] contains NULL and you assign
anything (except NULL) to the global variable $var.

The warning will _not_ appear:
- if $_SESSION['var'] contains anything else - or -
- if you don't use a global variable named $var

- PHP: Session Functions - Manual
 
Habe mich wohl nicht ganz verständlich ausgedrückt.
Dein Script erwartet register_global = on.
Dein Server steht auf register_global = off

Daher kommt auch der Fehler.

Mein kleiner Code korrigiert Fehler nicht nur aus einer Session-Problematik sondern auch für alle anderen Variablen wie $_GET, $_POST, COOKIE etc.
Für Formulare wäre der Code geradezu der blanke Horror, ansonsten können auch alte Scripten, die register_global = on erwarten, damit zum Leben erweckt werden.
Generell gillt, das dein Script überarbeitet werden sollte.

Früher (lang ists her) hat PHP automatisch $test mit der entsprechenden $_GET['test'] oder _POST['test'] Variablen belegt, man musst also nicht mit $_POST arbeiten. Das gillt auch für $_SERVER, $_REQUEST etc.
register_global hat dann sowas wie Superglobale aus den Vars gemacht, was schlicht ein Irrsinn ist.
 
Werbung:
Hallo,

irgendwie verstehe ich das nicht wirklich.

Ich benutze den gleichen Seitenaufbau (mit der obigen Abfrage) auf ca 25 Seiten. Nur auf dieser einen wird dieser Fehler angezeigt. Und das auch nur beim ersten mal aufrufen. Rufe ich diese Seite nach meinem Login erneut auf, dann ist der Fehler weg.

------
EDIT:

Hat sich erledigt. Da hat sich tatsächlich eine globale Variable eingemogelt, die den gleichen Namen wie eine meiner Session Variablen hat.
Danke für die Tipps!
 
Zuletzt bearbeitet:
Der Fehler ist kein Fehler sondern ein warning und verschwindet nach einem reload.

Hast du den Code von den Leuten mal eingebaut und probiert?
 
Hallo,

nein ich habe den Code nicht eingebaut, da ich ja den Auslöser für die Warnung finden konnte und nicht diese "quick & dirty"-Methode einbauen wollte.
 
Werbung:
Zurück
Oben