如何检查用户是否登录到其他域?

时间:2012-07-14 18:45:36

标签: php session cookies

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

2 个答案:

答案 0 :(得分:3)

您可以使用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"]));
} ?>

希望这会有所帮助! :)

答案 1 :(得分:0)

如果您控制两个域,则可以执行此操作。一种简单但不安全的方法是使用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是什么,然后你可以使用一个简单的来自社区站点的远程调用,以了解游戏用户是否已登录。