LightOpenID использует только первый возвращенный AuthURL, несмотря на запуск отдельных сессий PHP

Вот мой код для входа ниже, он довольно стандартный. Зачем пользователю, который нажимает логин на steamcommunity. Ниже этот код представляет собой быстрый отладочный вывод, который я создал вместе, который демонстрирует, что, хотя отправляются 2 AuthURL, по какой-то причине LightOpenID применяет первый возвращенный результат к каждому пользователю, пытающемуся аутентифицироваться через steam в аналогичное время. То есть добираться до steamcommunity и входить в систему.

 <?
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 отправляется дважды, но фактически используется только один ответ:

[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

Как вы можете видеть, хотя 2 AuthURL отправляются в одно и то же время, как только возвращается один идентификатор, он применяет его к обоим пользователям, а это означает, что люди вошли в неправильные учетные записи.

Эта проблема кажется полностью воспроизводимой с помощью https://github.com/SmItH197/SteamAuthentication Примеры PHP

Действия по воспроизведению:
1. Первый пользователь нажимает «Войти через Steam», зависает при входе OpenID в steamcommunity.com.
2. Второй пользователь нажимает кнопку «Войти через steam», руки на steamcommunity.com.
3. Оба пользователя затем нажимают, один будет зарегистрирован как другой.

0

Решение

Протестировано это на внешнем веб-сервере. Оказывается, это происходит из-за конфигурации сервера / PHP, не совсем уверенной, почему это происходит или в чем причина, поэтому мое решение будет сейчас перенести мой steamauth на другой сервер.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]