Php 需要使用头重定向传递会话的帮助吗

Php 需要使用头重定向传递会话的帮助吗,php,arrays,session,oauth,associative-array,Php,Arrays,Session,Oauth,Associative Array,我正在尝试为我喜欢的游戏(EVE Online)创建一个需要oauth的第三方应用程序。 我已经决定在oauth自己的脚本中进行oauth处理,一旦解决了这个问题,就根据从oauth检索到的CharacterID将一个关联数组放入会话中 我能够从脚本末尾处理oauth请求的/callback/index.php'中成功输出会话数组所需的内容。但是,我想让这个脚本“在后台”进行一些保密,并将大部分活动重定向到下面目录中的“../main.php” 但是,当我最终访问main.php时,打印会话将返

我正在尝试为我喜欢的游戏(EVE Online)创建一个需要oauth的第三方应用程序。 我已经决定在oauth自己的脚本中进行oauth处理,一旦解决了这个问题,就根据从oauth检索到的CharacterID将一个关联数组放入会话中

我能够从脚本末尾处理oauth请求的/callback/index.php'中成功输出会话数组所需的内容。但是,我想让这个脚本“在后台”进行一些保密,并将大部分活动重定向到下面目录中的“../main.php”

但是,当我最终访问main.php时,打印会话将返回一个空数组。我做错了什么?我整天都在寻找解决方案,并且已经实现了其中的每一个

以下是相关文件:

session.php

<?php
    if (!empty($_GET['ID'])) {
        session_id($_GET['ID']);
    }
    if (session_status() == PHP_SESSION_NONE) {
        session_start();
    } else {
        $sLocation="http://eve.oriigen.com/eClt";
        header("Location: ".$sLocation);
        exit();
    }

?>
<?php require_once '../src/session.php' ?>
<?php require_once 'secret.php' ?>
<?php

    function auth_error($error_message)
    {
        print "There's been an error";
        error_log($error_message);
        exit();
    }

    $sUserAgent = "EVE Contact List Toolkit [eClt]";

    $post_url = "https://login.eveonline.com/oauth/token";
    $get_url = "https://login.eveonline.com/oauth/verify";

    $client_id="Basic ".base64_encode($sClientId.":".$sSecretKey);
    $content_type = "application/x-www-form-urlencoded";
    $host_url = "login.eveonline.com";

    $aHeaders = array("Authorization: ".$client_id,
                    "Content-type: ".$content_type,
                    "Host: ".$host_url);

    $aPostFields = array("grant_type"=>"authorization_code",
                         "code"=>$_GET["code"]);


    $oCurlRequest = curl_init();
    curl_setopt($oCurlRequest, CURLOPT_URL, $post_url);
    curl_setopt($oCurlRequest, CURLOPT_USERAGENT, $sUserAgent);
    curl_setopt($oCurlRequest, CURLOPT_HTTPHEADER, $aHeaders);
    curl_setopt($oCurlRequest, CURLOPT_POST, count($aPostFields));
    curl_setopt($oCurlRequest, CURLOPT_POSTFIELDS, http_build_query($aPostFields));
    curl_setopt($oCurlRequest, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($oCurlRequest, CURLOPT_SSL_VERIFYPEER, true);
    curl_setopt($oCurlRequest, CURLOPT_SSL_VERIFYHOST, 2);
    $oResult = curl_exec($oCurlRequest);

    if ($oResult===false) {
        auth_error(curl_error($oCurlRequest));
    }

    curl_close($oCurlRequest);

    $aResponse=json_decode($oResult);
    unset($oCurlRequest);
    unset($oResult);


    $sTokenType=$aResponse->token_type;
    $sAuthToken=$aResponse->access_token;
    $iAuthTokenExpire=$aResponse->expires_in;
    $sRefreshToken=$aResponse->refresh_token;

    $sGetHeader="Authorization: ".$sTokenType." ".$sAuthToken;
    $oCurlRequest = curl_init();
    curl_setopt($oCurlRequest, CURLOPT_URL, $get_url);
    curl_setopt($oCurlRequest, CURLOPT_USERAGENT, $sUserAgent);
    curl_setopt($oCurlRequest, CURLOPT_HTTPHEADER, array($sGetHeader));
    curl_setopt($oCurlRequest, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($oCurlRequest, CURLOPT_SSL_VERIFYPEER, true);
    curl_setopt($oCurlRequest, CURLOPT_SSL_VERIFYHOST, 2);
    $oResult = curl_exec($oCurlRequest);

    if ($oResult===false) {
        auth_error(curl_error($oCurlRequest));
    }
    curl_close($oCurlRequest);
    $aResponse=json_decode($oResult);
    unset($oCurlRequest);
    unset($oResult);

    $sCharId=(string)$aResponse->CharacterID;
    $sCharacterName=$aResponse->CharacterName;
    $sExpiresOn=$aResponse->ExpiresOn;
    $sTokenType=$aResponse->TokenType;
    $sCharacterOwnerHash=$aResponse->CharacterOwnerHash;
    $sIntellectualProperty=$aResponse->IntellectualProperty;

/*    $aCharInfo=array("CharID"=>(int)$sCharId,
                    "CharName"=>$sCharacterName,
                    "CharOwnerHash"=>$sCharacterOwnerHash,
                    "ExpiresOn"=>$sExpiresOn,
                    "AuthToken"=>$sAuthToken,
                    "AuthTokenExpIn"=>$iAuthTokenExpire,
                    "RefreshToken"=>$sRefreshToken);*/

    if (!isset($_SESSION[(string)$sCharId])) {
        $_SESSION[(string)$sCharId]=array("CharID"=>(int)$sCharId,
                    "CharName"=>$sCharacterName,
                    "CharOwnerHash"=>$sCharacterOwnerHash,
                    "ExpiresOn"=>$sExpiresOn,
                    "AuthToken"=>$sAuthToken,
                    "AuthTokenExpIn"=>$iAuthTokenExpire,
                    "RefreshToken"=>$sRefreshToken);
    } else {
        $_SESSION["moo"]=0;
    }

    session_write_close();
    $sRedirect="../main.php?ID=".session_id();
    header("Location: ".$sRedirect);
    exit();

/*    echo "<pre>";
    print_r($_SESSION);
    echo "</pre>";
    echo "<hr />";
    echo gettype($iCharId);
    echo "<hr />";
    echo "<pre>";
    print_r($aCharInfo);
    echo "</pre>";*/
?>

/callback/index.php

<?php
    if (!empty($_GET['ID'])) {
        session_id($_GET['ID']);
    }
    if (session_status() == PHP_SESSION_NONE) {
        session_start();
    } else {
        $sLocation="http://eve.oriigen.com/eClt";
        header("Location: ".$sLocation);
        exit();
    }

?>
<?php require_once '../src/session.php' ?>
<?php require_once 'secret.php' ?>
<?php

    function auth_error($error_message)
    {
        print "There's been an error";
        error_log($error_message);
        exit();
    }

    $sUserAgent = "EVE Contact List Toolkit [eClt]";

    $post_url = "https://login.eveonline.com/oauth/token";
    $get_url = "https://login.eveonline.com/oauth/verify";

    $client_id="Basic ".base64_encode($sClientId.":".$sSecretKey);
    $content_type = "application/x-www-form-urlencoded";
    $host_url = "login.eveonline.com";

    $aHeaders = array("Authorization: ".$client_id,
                    "Content-type: ".$content_type,
                    "Host: ".$host_url);

    $aPostFields = array("grant_type"=>"authorization_code",
                         "code"=>$_GET["code"]);


    $oCurlRequest = curl_init();
    curl_setopt($oCurlRequest, CURLOPT_URL, $post_url);
    curl_setopt($oCurlRequest, CURLOPT_USERAGENT, $sUserAgent);
    curl_setopt($oCurlRequest, CURLOPT_HTTPHEADER, $aHeaders);
    curl_setopt($oCurlRequest, CURLOPT_POST, count($aPostFields));
    curl_setopt($oCurlRequest, CURLOPT_POSTFIELDS, http_build_query($aPostFields));
    curl_setopt($oCurlRequest, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($oCurlRequest, CURLOPT_SSL_VERIFYPEER, true);
    curl_setopt($oCurlRequest, CURLOPT_SSL_VERIFYHOST, 2);
    $oResult = curl_exec($oCurlRequest);

    if ($oResult===false) {
        auth_error(curl_error($oCurlRequest));
    }

    curl_close($oCurlRequest);

    $aResponse=json_decode($oResult);
    unset($oCurlRequest);
    unset($oResult);


    $sTokenType=$aResponse->token_type;
    $sAuthToken=$aResponse->access_token;
    $iAuthTokenExpire=$aResponse->expires_in;
    $sRefreshToken=$aResponse->refresh_token;

    $sGetHeader="Authorization: ".$sTokenType." ".$sAuthToken;
    $oCurlRequest = curl_init();
    curl_setopt($oCurlRequest, CURLOPT_URL, $get_url);
    curl_setopt($oCurlRequest, CURLOPT_USERAGENT, $sUserAgent);
    curl_setopt($oCurlRequest, CURLOPT_HTTPHEADER, array($sGetHeader));
    curl_setopt($oCurlRequest, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($oCurlRequest, CURLOPT_SSL_VERIFYPEER, true);
    curl_setopt($oCurlRequest, CURLOPT_SSL_VERIFYHOST, 2);
    $oResult = curl_exec($oCurlRequest);

    if ($oResult===false) {
        auth_error(curl_error($oCurlRequest));
    }
    curl_close($oCurlRequest);
    $aResponse=json_decode($oResult);
    unset($oCurlRequest);
    unset($oResult);

    $sCharId=(string)$aResponse->CharacterID;
    $sCharacterName=$aResponse->CharacterName;
    $sExpiresOn=$aResponse->ExpiresOn;
    $sTokenType=$aResponse->TokenType;
    $sCharacterOwnerHash=$aResponse->CharacterOwnerHash;
    $sIntellectualProperty=$aResponse->IntellectualProperty;

/*    $aCharInfo=array("CharID"=>(int)$sCharId,
                    "CharName"=>$sCharacterName,
                    "CharOwnerHash"=>$sCharacterOwnerHash,
                    "ExpiresOn"=>$sExpiresOn,
                    "AuthToken"=>$sAuthToken,
                    "AuthTokenExpIn"=>$iAuthTokenExpire,
                    "RefreshToken"=>$sRefreshToken);*/

    if (!isset($_SESSION[(string)$sCharId])) {
        $_SESSION[(string)$sCharId]=array("CharID"=>(int)$sCharId,
                    "CharName"=>$sCharacterName,
                    "CharOwnerHash"=>$sCharacterOwnerHash,
                    "ExpiresOn"=>$sExpiresOn,
                    "AuthToken"=>$sAuthToken,
                    "AuthTokenExpIn"=>$iAuthTokenExpire,
                    "RefreshToken"=>$sRefreshToken);
    } else {
        $_SESSION["moo"]=0;
    }

    session_write_close();
    $sRedirect="../main.php?ID=".session_id();
    header("Location: ".$sRedirect);
    exit();

/*    echo "<pre>";
    print_r($_SESSION);
    echo "</pre>";
    echo "<hr />";
    echo gettype($iCharId);
    echo "<hr />";
    echo "<pre>";
    print_r($aCharInfo);
    echo "</pre>";*/
?>

[  ]

正如您可以从评论的部分中看到的,我已经尝试了我能想到的所有诊断打印输出。那么,我哪里出错了?

解决了它-根据我在发布此问题后发现的一个相关问题:

发件人:

PHP会话存储机制最初是围绕“注册”变量构建的,因此$\u会话中的键必须是可以单独作为变量处理的名称。这意味着$\u会话[10]是无效的,因为$10不是有效的变量名,而且由于$foo[10]和$foo['10']引用的是同一事物,$\u会话['10']也是无效的


CharacterID或者是int的字符串版本的和int,显然PHP会话不喜欢数组键中的数字…

通过
$\u GET
传递会话id有什么特殊原因吗?我尝试了带和不带。通过$\u GET只是回答这个问题的又一次机会。
$10确实是不允许的