2010-09-10 60 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]; 
} 
相关问题