2010-09-10 67 views

回答

43

不要使用它。描述如下:

在當前會話中註冊一個或多個全局變量。即來到我的腦海

兩件事情:

  1. 使用全局變量是不好的,無論如何,找到一個方法來避免它們。
  2. 您仍然可以使用$_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"); 

Read More Here

16

PHP 5.3

session_register("name"); 

因爲PHP 5之前。3

$_SESSION['name'] = $name; 
-1

我們只需要在棄用函數前面使用@。無需改變上述職位中提到的任何內容。例如:if([email protected]_is_registered("username")){ }。只要把@和問題解決了。

+2

只是抑制錯誤不是處理已棄用功能的正確方法。它有時是一個快速修補程序,但從來不是一個長期解決方案(甚至不是短期的!)。試着找出它被標記爲不贊成的原因以及你可以對它做些什麼! – Haudegen 2015-08-04 14:32:15

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]; 
}