Php 为什么不是';t$\u会话数据是否传递到函数文件的所有部分?

Php 为什么不是';t$\u会话数据是否传递到函数文件的所有部分?,php,class,session-variables,Php,Class,Session Variables,我重新编写了很多登录脚本,并在我们的一个内部站点上运行了一个像这样设置的大型函数文件 阶级 作用 作用 类 阶级 类验证用户 阶级 阶级 我运行了一个脚本,用于检索SSO$\u会话数据,并希望将其从SSO服务器传递到用户会话 我尝试在文件的不同部分运行脚本,但得到了相同的结果。它在某些地方有效,而在其他地方无效 我可以将所有$\u会话变量回显到HTML页面 我还可以在某些类中使用$\u会话数据(无论我把它放在哪里,都是一样的) 然而,我真正需要使用的类-验证用户-所有内容都为空 我是否遗

我重新编写了很多登录脚本,并在我们的一个内部站点上运行了一个像这样设置的大型函数文件

  • 阶级
    • 作用
    • 作用
  • 阶级
  • 类验证用户
  • 阶级
  • 阶级
我运行了一个脚本,用于检索SSO
$\u会话
数据,并希望将其从SSO服务器传递到用户会话

我尝试在文件的不同部分运行脚本,但得到了相同的结果。它在某些地方有效,而在其他地方无效

我可以将所有
$\u会话
变量回显到HTML页面

我还可以在某些类中使用
$\u会话
数据(无论我把它放在哪里,都是一样的)

然而,我真正需要使用的类-验证用户-所有内容都为空

我是否遗漏了一些内容(请不要告诉我将
会话_start();
放入)

我认为
$\u SESSION
数据是超全局的。检索到的
$\u会话
数据也是超全局的吗

如果不是,我需要做什么才能让它超全球化

下面是我用来检索要传递的会话数据的脚本-

session_start(); 
$appKey = "00000000Uz";
$safeurl =  'https://safe.000000.com/login/sso/SSOService?app=playbooks';
// first call back after safe login - POST is set
if ($_POST && isset($_POST['digest'])) 
{
    $digest = $_POST["digest"];

    // set the session variables ...
    $_SESSION['usernames'] = $_POST["firstname"]." ".$_POST["lastname"];
    $_SESSION['firstname'] = $_POST["firstname"];
    $_SESSION['lastname'] = $_POST["lastname"];
    $_SESSION['email'] = $_POST["email"];
    $_SESSION['uid'] = $_POST["uid"];

    // Needed for key
    $uid = $_POST["uid"];
    $time = $_POST["time"];

    // Read the property file with the key and URL so this won't go into the main code 
    // this sets $appKey and $safeurl
    $mykey = "".$uid.$time.$appKey;
    $mydigest = md5($mykey);
}

// session is not initialized as we never got the post above to set session vars
// call now the safe login to get the post to set the session vars ...
if (!isset($_SESSION['uid']) || empty($_SESSION['uid']))
{
    // Read the property file with the key and URL so this won't go into the main code 
    // this sets $appKey and $safeurl
    header("Location: ".$safeurl);
}          

$usr = $_SESSION['uid'];         
$this->setCurrentUserName($usr);
return TRUE;      
}     

在使用
$\u会话之前,请确保正在调用
会话\u start()
,$\u会话始终是一个全局数组。如果在某些地方看不到该值,则很可能是您以前删除了它们。显然,如果session\u start未使用PHPINI设置自动运行,请确保运行它。
$\u session
是一个全局变量,它始终可用(在调用
session\u start()
之后)。也就是说,依赖globals是不好的,它会导致无法维护的代码。创建一个处理原始会话的类。是否在运行填充$\u会话变量的脚本部分之前调用会话开始?如果它在您的问题中所处的位置,您可能会在启动会话之前检索数据,这将不会填充$\u会话。另外,您在问题中放置的代码在哪里?在其中一个类中?会话_start()是否位于问题代码中的错误位置?现在脚本位于php页面的最顶端。。。所有的会话变量都可以回传,但它们在某些类中不起作用。有些是这样的。会话_start()是否在问题代码中的错误位置?现在脚本位于php页面的最顶端。。。所有的会话变量都可以回传,但它们在某些类中不起作用。有些是这样。
标题(“位置:.$safeurl”)-无论这是什么文件,您都需要运行
会话\u start()
。只有父(调用方)文件需要它。所有包含的文件都可以使用
$\u会话
。如果(session_id()='')session_start(),您可以安全地执行
在您的所有文件中…我有if(session_id()=='')session_start();在所有文件中。但是,我无法将其添加到$safeurl中,因为这是会话详细信息的SSO服务器。我所有的会话数据都能正常工作,只是不能在这个文件中的几个类中引用它。。。真让我抓狂,因为我认为这是一个20分钟的实现。会话只在您使用它们的服务器上工作。。您无法(轻松地)将会话数据从服务器1传递到服务器2。。这就是你的意思吗?事实上,等等。。这个php文件是SSO测试的回调,对吗?如果是这样,那么它可能是在发布数据,而不是使用会话。检查PHP页面中的
die(var\u dump($\u POST))
以查看发生了什么。。。