我想为浏览器游戏社区构建社区页面(浏览器游戏不是我的,所以我无法添加任何代码)。现在我想在我的网站上查看用户是否已登录浏览器游戏。只有在这种情况下,用户才能看到内容。既然你无法读取在另一个域上设置的cookie,有没有可能的方法来实现这个目标?
答案 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是什么,然后你可以使用一个简单的来自社区站点的远程调用,以了解游戏用户是否已登录。