PHP 5.3のsession_register()
非推奨の問題を修正する方法
使用しないでください。説明は言う:
現在のセッションに1つ以上のグローバル変数を登録します。
私の頭に浮かんだ2つのこと:
$_SESSION['var'] = "value"
_で変数を設定できます。manual からの警告も参照してください。
_
register_globals
_に関係なくスクリプトを機能させる場合は、_$_SESSION
_エントリが自動的に登録されるため、代わりに_$_SESSION
_配列を使用する必要があります。スクリプトがsession_register()
を使用する場合、PHPディレクティブ_register_globals
_が無効になっている環境では動作しませんnot]。
_register_globals
_ディレクティブ デフォルトでFalse
に設定されています!
さらに:
これにより、
global
変数が登録されます。 function内からセッション変数を登録する場合は、global
キーワードまたは_$GLOBALS[]
_配列を使用して、それをグローバルにする必要があります。または、下記の特別なセッション配列を使用します。
そして
_
$_SESSION
_(または_$HTTP_SESSION_VARS
_)を使用している場合は、session_register()
、session_is_registered()
、およびsession_unregister()
を使用しないでください。
変数を設定するには、$_SESSION
を直接使用します。このように:
$_SESSION['name'] = 'stack';
代わりに:
$name = 'stack';
session_register("name");
before PHP 5.3
session_register("name");
since PHP 5.3
$_SESSION['name'] = $name;
フォールバック関数が必要な場合は、これを使用できます
function session_register($name){
global $$name;
$_SESSION[$name] = $$name;
$$name = &$_SESSION[$name];
}
Felix Kling の答えを補完するために、私は次のコードを持つコードベースを研究していました。
if (is_array($start_vars)) {
foreach ($start_vars as $var) {
session_register($var);
}
} else if (!(empty($start_vars))) {
session_register($start_vars);
}
Session_registerを使用しないために、次の調整を行いました。
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];
}