LightOpenID仅使用返回的第一个AuthURL,尽管个别PHP会话正在启动

LightOpenID仅使用返回的第一个AuthURL,尽管个别PHP会话正在启动,php,session,openid,steam,lightopenid,Php,Session,Openid,Steam,Lightopenid,下面是我的登录代码,非常标准。为什么一个用户要在社区上按login。下面这段代码是我收集的一个快速调试输出,它演示了尽管发送了2个authURL,但出于某种原因,LightOpenID将第一个返回的结果应用于每个试图在类似时间通过steam进行身份验证的用户。即进入社区并登录 <? ob_start(); session_start(); if(isset($_GET['logout'])) { if(isset($_COOKIE[session_name()])):

下面是我的登录代码,非常标准。为什么一个用户要在社区上按login。下面这段代码是我收集的一个快速调试输出,它演示了尽管发送了2个authURL,但出于某种原因,LightOpenID将第一个返回的结果应用于每个试图在类似时间通过steam进行身份验证的用户。即进入社区并登录

 <?
 ob_start();
 session_start();
if(isset($_GET['logout']))
{
    if(isset($_COOKIE[session_name()])):
        setcookie(session_name(), '', time()-7000000, '/');
    endif;

    if(isset($_COOKIE['login_user'])):
        setcookie('login_user', '', time()-7000000, '/');
    endif;

    session_unset();

    session_destroy();

    header("Location: index.php");
}

include "kern/apikey.php";
include "kern/openid.php";
$OpenID = new LightOpenID("xxxxxx.com");

if(!$OpenID->mode)
{
    if(isset($_GET['login']))
    {
        $OpenID->identity = "http://steamcommunity.com/openid";
        header("Location: " . $OpenID->authUrl());
    }
    if(!isset($_SESSION['SteamAuth']))
    {
        $login = "<div id=\"login\">In order to access the panel, you must <br /><br /> <a href=\"?login\"><img src=\"http://cdn.steamcommunity.com/public/images/signinthroughsteam/sits_large_noborder.png\"/></a></div>";
    }
} else if ($OpenID->mode == "cancel")
{
    echo "Authentication Cancelled...";
} else {
    if($OpenID->validate())
    {


        $id = $OpenID->identity;

        $_SESSION['SteamID64'] = str_replace("http://steamcommunity.com/openid/id/", "", $id);
        $_SESSION['SteamAuth'] = true;

        $Steam64 = str_replace("http://steamcommunity.com/openid/id/", "", $id);
        $profile = file_get_contents("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key={$api}&steamids={$Steam64}");
        $steam = json_decode($profile, true);
        $communityid = $steam['response']['players'][0]['steamid'];
        $authserver = bcsub($communityid, '76561197960265728') & 1;
        $authid = (bcsub($communityid, '76561197960265728')-$authserver)/2;
        $_SESSION['SteamID'] = "STEAM_0:" . $authserver . ":" . $authid;
        $_SESSION['SteamName'] = $steam['response']['players'][0]['personaname'];

        header("Location: index.php");
    } else {
        echo "User is not logged in";
    }
}

?>

<html>
<body>
<div id="title">Login</div>
<div id="content">
<?
    echo $login;
?>
</div>
</body>
</html>
正如您所看到的,虽然两个authURL在相同的时间被发送,但一旦返回一个标识,它就会将其应用于两个用户,这意味着人们会登录到不正确的帐户

使用PHP示例,这个问题似乎完全可以重现

复制步骤: 1.第一个用户单击通过steam登录,挂起steamcommunity.com OpenID登录。 2.第二个用户单击通过steam登录,在steamcommunity.com登录。
3.然后两个用户都点击,其中一个用户将作为另一个用户登录。

在外部Web服务器上测试了这一点,结果表明这似乎是由于服务器/PHP配置造成的,不完全确定发生的原因或原因,因此,我的解决方案将是暂时将我的steamauth移动到另一台服务器。

您发布的任何原因以及您先前已删除问题的确切副本?是的!前一个没有那么描述性-标题描述了问题的一个症状,现在更清楚了,也就是说,在我指责steam登录之前,而现在我把它缩小到被视为非唯一的请求。我相信,由于标题更具描述性,并且因为它是一个人在点击某个问题之前最初看到的内容,我可能会让某人更熟悉LightOpenID,而不是steam登录问题。我用一个PHP脚本示例更新了该问题,如果重复这些步骤,该示例也会遇到完全相同的问题。
[09-Nov-2014 14:09:52 America/Chicago] Begin login!
[09-Nov-2014 14:09:52 America/Chicago] Sent authurl!xxxxx

[09-Nov-2014 14:10:03 America/Chicago] Begin login!
[09-Nov-2014 14:10:03 America/Chicago] Sent authurl!xxxxx

[09-Nov-2014 14:10:10 America/Chicago] Begin login!
[09-Nov-2014 14:10:11 America/Chicago] Got identity!http://steamcommunity.com/openid/id/xxxx

[09-Nov-2014 14:10:11 America/Chicago] Using Steam64!xxxx

[09-Nov-2014 14:10:11 America/Chicago] Using string steam64!xxxx