如何解决session_register()弃用的问题?

如何解决PHP 5.3中的session_register()弃用问题

不要使用它。 描述说:

用当前会话注册一个或多个全局variables。

我想起了两件事:

  1. 无论如何,使用全局variables是不好的,find一种方法来避免它们。
  2. 你仍然可以用$_SESSION['var'] = "value"来设置variables。

另请参阅手册中的警告:

如果你希望你的脚本不piperegister_globals是否工作,你需要改为使用$_SESSION数组,因为$_SESSION条目是自动注册的。 如果您的脚本使用session_register() ,那么在PHP指令register_globals被禁用的环境中将不起作用。

这非常重要,因为默认情况下 register_globals指令设置为False

进一步:

这注册了一个globalvariables。 如果你想从一个函数中注册一个会话variables,你需要确保使用global关键字或者$GLOBALS[]数组使其成为全局variables,或者使用如下所述的特殊会话数组。

如果使用$_SESSION (或$HTTP_SESSION_VARS ),则不要使用session_register()session_is_registered()session_unregister()

直接使用$_SESSION来设置variables。 喜欢这个:

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

代替:

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

在这里阅读更多

在PHP 5.3之前

 session_register("name"); 

自PHP 5.3以来

 $_SESSION['name'] = $name; 

如果你需要一个后备function,你可以使用这个

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

我们只需要在弃用的函数前面使用@ 。 没有必要改变上面提到的职位。 例如: if(!@session_is_registered("username")){ } 。 只要把@和问题解决了。