如何为php会话注册全局变量


How to register global variables for php sessions

我得到这个错误:

警告:未知:您的脚本可能依赖于PHP 4.2.3之前存在的会话副作用。请注意,会话扩展不考虑全局变量作为数据源,除非register_globals被启用。您可以通过设置session来禁用此功能和此警告。Bug_compat_42或session。在第0行

的Unknown中,bug_compat_warn分别为off

根据它,我必须启用(注册)全局变量对吗?如何做到这一点,为什么会出现错误?

您是否在PHP文档的顶部调用session_start() ?

PHP手册说session_register()函数从PHP 5.3.0开始已经弃用,不建议依赖它。

应该改成

$_SESSION['dog'] = "Woof";

但是你必须在你的文档中调用session_start()之前!

在PHP指令中启用register_globals后

在php启动时使用session_start()

$barney = "you can try this";
session_register("barney");
// Use of $_SESSION is preferred, as of PHP 4.1.0
$_SESSION["hotel"] = "Starling";
// The old way was to use $HTTP_SESSION_VARS
$HTTP_SESSION_VARS["email"] = "neo@gmail.com";

Register globals是一种将_POST/_GET/_SESSION中的变量以它们自己的名字定义到全局作用域的方法。我从来没有使用或看到过_SESSION中变量的用法……但解决方案是一样的。PHP应该宣布文件路径&行,所以你所需要做的就是重构你的代码,停止依赖于这个被弃用的特性。

似乎register_globals在你的php.ini文件中被设置为"Off"。如果你有权限,你可以改变这个。这个线程也是相关的:

php-session-side-effect-warning-with-global-variables-as-a-source-of-data

全局变量不再被认为是正常使用。它们会导致各种管理问题,内存分配问题。PHP常用的做法是使用会话变量($_SESSION["variable_name"])。如果你真的喜欢全局变量,你可以在php.ini中启用它们。