wake-up-neo.net

Wie kann das veraltete Problem von session_register () behoben werden?

So beheben Sie das session_register() veraltete Problem in PHP 5.3

42
learner

Verwenden Sie es nicht. Die Beschreibung sagt:

Registrieren Sie eine oder mehrere globale Variablen in der aktuellen Sitzung.

Zwei Dinge, die mir in den Sinn kamen:

  1. Die Verwendung globaler Variablen ist ohnehin nicht gut. Finden Sie einen Weg, um sie zu vermeiden.
  2. Sie können mit $_SESSION['var'] = "value" noch Variablen setzen.

Siehe auch die Warnungen aus dem manual :

Wenn das Skript unabhängig von register_globals funktionieren soll, müssen Sie stattdessen das $_SESSION-Array verwenden, da $_SESSION-Einträge automatisch registriert werden. Wenn Ihr Skript session_register() verwendet, funktioniert not nicht in Umgebungen, in denen die Direktive PHP register_globals deaktiviert ist.

Dies ist ziemlich wichtig, da die register_globals-Direktive standardmäßig auf False gesetzt ist!

Des Weiteren:

Dies registriert eine Variable global. Wenn Sie eine Sitzungsvariable innerhalb einer function registrieren möchten, müssen Sie sicherstellen, dass sie mit dem Schlüsselwort global oder dem $GLOBALS[]-Array global festgelegt wird, oder verwenden Sie die unten angegebenen speziellen Session-Arrays.

und 

Wenn Sie $_SESSION (oder $HTTP_SESSION_VARS) verwenden, verwenden Sie session_register(), session_is_registered() und session_unregister() nicht.

43
Felix Kling

Verwenden Sie $_SESSION direkt zum Setzen von Variablen. So was:

$_SESSION['name'] = 'stack';

Anstatt:

$name = 'stack';
session_register("name");

Lesen Sie hier mehr

24
shamittomar

vor PHP 5.3

session_register("name");

seit PHP 5.3 

$_SESSION['name'] = $name;
17
Serhii Koval

wenn Sie eine Rückfallfunktion benötigen, können Sie diese verwenden

function session_register($name){
    global $$name;
    $_SESSION[$name] = $$name;
    $$name = &$_SESSION[$name]; 
}
10
wutzebaer

Um die Antwort von Felix Kling zu ergänzen, studierte ich eine Codebase, die den folgenden Code hatte:

if (is_array($start_vars)) {
    foreach ($start_vars as $var) {
        session_register($var);
    }
} else if (!(empty($start_vars))) {
    session_register($start_vars);
}

Um session_register nicht zu verwenden, haben sie folgende Anpassungen vorgenommen:

if (is_array($start_vars)) {
    foreach ($start_vars as $var) {
        $_SESSION[$var] =  $GLOBALS[$var];
    }
} else if (!(empty($start_vars))) {
    $_SESSION[$start_vars] =  $GLOBALS[$start_vars];
}
0
Pedro Pinheiro