清除缓存后Facebook访问令牌无效&;饼干

清除缓存后Facebook访问令牌无效&;饼干,facebook,facebook-graph-api,browser,access-token,facebook-access-token,Facebook,Facebook Graph Api,Browser,Access Token,Facebook Access Token,我的应用程序未加载,在这两种情况下我会出现以下错误: a) 我在清除缓存和cookies后第一次访问我的应用程序,或者从我以前从未使用过的PC上使用任何浏览器访问我的应用程序 b) 当用户A尝试在用户b从应用程序(和Facebook)注销后直接从同一台PC和浏览器访问应用程序时,无需清除缓存或cookie 但是,当我按F5更新网页时,它工作正常 这是我在日志文件中看到的错误: {"readyState":4,"responseText":"Invalid access token","statu

我的应用程序未加载,在这两种情况下我会出现以下错误:

a) 我在清除缓存和cookies后第一次访问我的应用程序,或者从我以前从未使用过的PC上使用任何浏览器访问我的应用程序

b) 当用户A尝试在用户b从应用程序(和Facebook)注销后直接从同一台PC和浏览器访问应用程序时,无需清除缓存或cookie

但是,当我按F5更新网页时,它工作正常

这是我在日志文件中看到的错误:

{"readyState":4,"responseText":"Invalid access token","status":200,"statusText":"OK"}
用户验证代码:

require_once(dirname(__DIR__).'/lib/common/AppInfo.php');
require_once(dirname(__DIR__).'/sdk/src/facebook.php');
require_once(dirname(__DIR__).'/lib/logic/UsersLogic.php');
require_once(dirname(__DIR__).'/lib/common/Log.php');

if (substr(AppInfo::getUrl(), 0, 8) != 'https://' && $_SERVER['REMOTE_ADDR'] != '127.0.0.1') {
    header('Location: https://'. $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
    exit();
}

try {
    $facebook = new Facebook(array(
            'appId'  => AppInfo::appID(),
            'secret' => AppInfo::appSecret(),
    ));
    $user_id = $facebook->getUser();
} catch (Exception $e) {
    exit("Error getting facebook data");
}

if ($user_id) {
    try {
        $basic = $facebook->api('/me');
    } catch (FacebookApiException $e) {
        if (!$facebook->getUser()) {
            exit("Invalid access token");
        }
    }
    if($basic==null){
        exit("Application not installed");
    }
    $user=UsersLogic::getUser($user_id);
    if($user==null){
        exit("User not registered in database");
    }

}
else{
    exit("No user logged");
}
你知道为什么会这样吗?也许我应该强制请求一个新的用户访问令牌?(如何)


谢谢

这完全是意料之中的-在第一种情况下,没有cookie,不知道用户是谁,因此无法获得有效的访问令牌,在第二种情况下,从Facebook注销(或取消授权您的应用程序)将导致您的任何访问令牌无效

但是这个错误,就是来自客户端的代码,对吗?
在这种情况下,您需要将正在使用的代码与FB.getLoginStatus或类似文件打包,这样您就不会运行它,除非您实际拥有所需的访问令牌。

谢谢!你的意思是在尝试之前添加这些行吗??getLoginStatus(function(response){if(response.session){@arturo,我认为您最好重新考虑服务器端代码和客户端代码的分离。