如何解決session_register()
過時問題,在PHP 5.3如何解決session_register()已棄用的問題?
41
A
回答
43
不要使用它。描述如下:
在當前會話中註冊一個或多個全局變量。即來到我的腦海
兩件事情:
- 使用全局變量是不好的,無論如何,找到一個方法來避免它們。
- 您仍然可以使用
$_SESSION['var'] = "value"
設置變量。
又見警告從manual:
如果你想不管
register_globals
你的腳本工作,需要改用$_SESSION
數組作爲$_SESSION
條目自動註冊。如果您的腳本使用session_register()
,它將而不是在禁用PHP指令register_globals
的環境中工作。
這是非常重要的,因爲register_globals
指令is set to False
by default!
另外:
此註冊一個
global
變量。如果要從函數中註冊會話變量,則需要確保使用global
關鍵字或$GLOBALS[]
數組使其成爲全局變量,或者使用如下所述的特殊會話數組。
和
如果您正在使用
$_SESSION
(或$HTTP_SESSION_VARS
),不要使用session_register()
,session_is_registered()
和session_unregister()
。
23
直接使用$_SESSION
設置變量。像這樣:
$_SESSION['name'] = 'stack';
相反的:
$name = 'stack';
session_register("name");
16
PHP 5.3
session_register("name");
因爲PHP 5之前。3
$_SESSION['name'] = $name;
-1
我們只需要在棄用函數前面使用@
。無需改變上述職位中提到的任何內容。例如:if([email protected]_is_registered("username")){ }
。只要把@
和問題解決了。
8
,如果你需要一個備用的功能,你可以使用這個
function session_register($name){
global $$name;
$_SESSION[$name] = $$name;
$$name = &$_SESSION[$name];
}
0
爲了補充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];
}
只是抑制錯誤不是處理已棄用功能的正確方法。它有時是一個快速修補程序,但從來不是一個長期解決方案(甚至不是短期的!)。試着找出它被標記爲不贊成的原因以及你可以對它做些什麼! – Haudegen 2015-08-04 14:32:15