我如何在我的Facebook应用程序中维护会话cookie? 目前我的所有页面都有以下代码:
$facebook = new Facebook(array(
'appId' => 'myid',
'secret' => 'mysecret',
'cookie' => true,
));
$session = $facebook->getSession();
$me = null;
// Session based API call.
if ($session) {
try {
$uid = $facebook->getUser();
$me = $facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
}
}
// login or logout url will be needed depending on current user state.
if ($me) {
$logoutUrl = $facebook->getLogoutUrl();
} else {
$loginUrl = $facebook->getLoginUrl(array('canvas' => 1,
'fbconnect' => 0,
'req_perms' => 'publish_stream,email',
'next' => 'register.php',
'cancel_url' => 'http://www.facebook.com/apps/application.php?id=MYAPPID&perms' ));
}
if (!$me){ print("<html><head>");
print("<script type=\"text/javascript\">function redirect(){ top.location.href = \"");
print($loginUrl);
print("\"; }</script></head>");
print("<body onload=\"redirect();\">Please wait...</body></html>"); exit(); }
这是错误的,据我了解,每次用户导航到画布中的不同页面时,我都会收到一个新会话。我需要使用请求吗?如果是这样我怎么做到这一点?
答案 0 :(得分:3)
您正在使用PHP SDK来获取用户会话,这没关系。 PHP SDK足够聪明,可以在用户上设置和使用cookie来保存他们的会话信息 - 所以你不会在每次加载页面时从Facebook获取任何新东西。您确实需要在每个页面上安装重定向,以防万一用户会话超时,或者用户在使用中卸载您的应用程序,或者直接链接到应用程序的页面而不是已安装的用户。
为了使您的代码更清洁,您可以移动所有代码以获取会话和放大器。将安装从用户捕获到单个脚本,并将其包含在应用程序中每个页面的顶部。然后你就没有那么漂浮,你可以在需要的时候轻松地改变/调整它。
编辑:如果用户每次导航到应用程序中的其他页面时都会丢失会话,则用户的浏览器可能会阻止FB PHP SDK设置的cookie,因为它位于iframe中。您可能还需要在应用程序中设置P3P策略标头,这通常可以解决该问题。
<?php
header('P3P: CP="CAO PSA OUR"');