与Session相关的Facebook令牌

5 php mysql session facebook oauth-2.0

我有这个功能的Facebook

public function link2(){
        global $config;
        $facebook = new Facebook(array(
              'appId'  => $config['facebook_appId'],
              'secret' => $config['facebook_secret'],
              'cookie' => true
        ));
        return $facebook;
    }
Run Code Online (Sandbox Code Playgroud)

然后我这样做以获得令牌

if(isset($_SESSION['fb_'.$config['facebook_appId'].'_access_token'])){
            $accesstoken = $_SESSION['fb_'.$config['facebook_appId'].'_access_token'];
        }else{
            $accesstoken = $facebook->getAccessToken();
        }
Run Code Online (Sandbox Code Playgroud)

并将其存储在DB中,但在我注销并再次登录并再次调用ALBUMS后,我收到错误

A user access token is required to request this resource
Run Code Online (Sandbox Code Playgroud)

我正在session_destroy我的logout.php文件中,我想知道会话是如何与此相关的,如果我将我的logout.php文件更改为刚刚取消设置userId变量,那么调用对我有效.我错过了什么吗?

Sim*_*rta 1

为什么要将用户访问令牌存储在会话中?会话数据的重点是临时存储。

您可以在登录期间将令牌保存到数据库中,并在每次调用时从数据库中读取它$facebook = new Facebook( ...

如果你只把它存放在一个地方,那就容易多了。

第二点是,你不能期望用户使用注销按钮。如果用户只是关闭浏览器并杀死他或她的cookie,会话不会被破坏,但没有人可以再访问它。所以注销唯一应该做的就是销毁会话。