我也有这个问题。
在我的网站上,我还设置了一个名为“state”的 cookie 和 $_SESSION 变量。这导致了与 Facebook 类的冲突,因为 FB 类使用相同的键名。
以下是我对其他有此问题的人的解决方案:
脸书 PHP SDK v3.2.3
要做的是用 'fb_state' 替换某些 'state' 实例。
编辑(Marcus):我还用 $_GET['state'] 替换了所有 $_REQUEST['state'] 实例。这将强制应用程序从用户授权后的 URL 中获取“状态”值,因为 $_REQUEST 将获取您可能已经拥有的任何存储的“状态”cookie。就我而言,有一个。
例如 www.example.com/?code=AQA5cjNZ8iuZ...& state =48a4a0a89ebb0c568f713fabebcd4899# =
由于之前在我自己的网站上的活动,我之前存储的“状态”cookie:开
echo $_REQUEST['state']; // produces 'ON'
echo $_GET['state']; // produces 48a4a0a89ebb0c568f713fabebcd4899
在我的网站上。而且我不打算仅仅为 FB SDK 更改我的站点在服务器上存储 cookie 和会话变量的方法。
如果不将 $_REQUEST 更改为 $_GET,getCode() 函数将返回 false,因为:
if ($this->state === $_REQUEST['state']) {
不会解决。在我的情况下,实际比较将是 48a4a0a89ebb0c568f713fabebcd4899 与“ON”。
src/facebook.php
public function __construct($config) {
...
$state = $this->getPersistentData('state'); // line 67
// change to
$state = $this->getPersistentData('fb_state');
protected static $kSupportedKeys =
array('fb_state', 'code', 'access_token', 'user_id'); // line 83
src/base_facebook.php
$state = $this->getPersistentData('fb_state'); // line 263
$this->clearPersistentData('fb_state'); // 730
$this->setPersistentData('fb_state', $this->state); // line 776
希望这对将来的人有所帮助。