如何解决session_register()弃用的问题?
如何解决PHP 5.3中的session_register()
弃用问题
不要使用它。 描述说:
用当前会话注册一个或多个全局variables。
我想起了两件事:
- 无论如何,使用全局variables是不好的,find一种方法来避免它们。
- 你仍然可以用
$_SESSION['var'] = "value"
来设置variables。
另请参阅手册中的警告:
如果你希望你的脚本不pipe
register_globals
是否工作,你需要改为使用$_SESSION
数组,因为$_SESSION
条目是自动注册的。 如果您的脚本使用session_register()
,那么在PHP指令register_globals
被禁用的环境中将不起作用。
这非常重要,因为默认情况下 register_globals
指令设置为False
!
进一步:
这注册了一个
global
variables。 如果你想从一个函数中注册一个会话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")){ }
。 只要把@
和问题解决了。