如何检查用户是否登录到另一个域


How to check whether a user is logged in on another domain?

我想为浏览器游戏社区构建一个社区页面(浏览器游戏不是我的,所以我不能添加任何代码)。现在,我想在我的网站上检查用户是否登录了浏览器游戏。只有在这种情况下,用户才能看到内容。由于您无法读取在另一个域上设置的cookie,有什么可能的方法可以实现这一点吗?

您可以使用类似CAS的东西。中央身份验证服务器,当没有为第一个域设置会话时,它会是这样的:

example.net

<?php
session_start();
if(!isset($_SESSION["user"]))
{
    header('Location: http://auth.example.com/?from=example.net');
    die();
}
// Rest of the content!
?>

对于域auth.example.com

<?php
session_start();
if(!isset($_SESSION["user"]))
{ ?>
    <!-- form to get login credentials -->
<?php } else {
     if(isset($_GET["from"]) && isset($_SESSION["user"]))
         header('Location: http://example.net/auth.php?authcode=' . yourEncryptFunction($_SESSION["user"]));
} ?>

希望这能有所帮助!:)

如果你同时控制两个域,你可以这样做。一个简单但不安全的方法是使用JavaScript来违反同源策略。在你的浏览器游戏中运行一个简单的脚本,比如:

<?php
$info = array(
    'isLoggedIn' => $_SESSION['isLoggedIn'],
    'loggedInAs' => $_SESSION['userName']
    );
echo "gameInfo = ".json_encode($info).";";

在您的社区页面上,您可以使用JavaScript来确定他们是否登录:

<script src="http://gamesite.com/jsGameStatus.php"></script>
<script>
alert(gameInfo.isLoggedIn 
    ? 'Logged In as '+gameInfo.loggedInAs 
    : 'Not logged in');
</script>

同样,不是超级安全的(有人可能篡改这些价值观)。如果你想要更安全的东西,你需要能够以某种方式将双方联系在一起——你的社区用户帐户必须知道他们的游戏帐户ID是什么,然后你可以使用来自社区网站的简单远程呼叫来知道游戏用户是否登录。