URL中的“state”参数与会话不匹配。

16

在 Facebook 文档中

require('include/facebook/autoload.php'); //SDK directory
$fb = new Facebook\Facebook([
'app_id' => '***********',
'app_secret' => '***********************'
]);

$helper = $fb->getRedirectLoginHelper();
$permissions = ['email', 'public_profile']; // optional
$loginUrl = $helper->getLoginUrl('http://www.meusite.com.br/login-callback.php', $permissions);

当将其导向$loginUrl时,返回结果为:Facebook SDK返回错误:跨站点请求伪造验证失败。URL和会话中的“state”参数不匹配。


2
这很可能表示PHP会话存在问题,比如会话ID没有正确传递。 - CBroe
2
这是一个与PHP会话相关的问题。我通过将<?php session_start();?>移动到页面开头解决了同样的问题。(由于某个编辑器在它之前插入了<HTML>头,所以它被向下移动了一些...)。我考虑启用php.ini中的session.auto_start = 1,但我对此还很陌生,并且想到如果其他脚本尝试启动已经启动的会话,可能会导致困扰。 - hellork
@hellork 谢谢,那就是问题所在...把session_start();放在第一行解决了。 - Partha Roy
11个回答

-2

您实际上可以从另一个域解析数据...例如:website.com与www.website.com不同。

如果您正在从http://website.com/login.php解析数据到http://www.website.com/fb-callback.php,那么这将是一个跨域问题,您收到的错误就是因为这个原因...

http://website.com和http://www.website.com是相同的,但脚本将它们识别为不同...希望这能解决问题。


这并没有提供问题的答案。如果要批评或请求作者澄清,请在他们的帖子下留言 - 您始终可以在自己的帖子上发表评论,并且一旦您拥有足够的声望,您将能够评论任何帖子 - danielschemmel
我重写了答案,以便更容易地理解它... 答案本来已经在帖子中了,但被编辑了一下以使其更有意义... 问题是"http://website.com"和"http://www.website.com"之间的差异,会被会话识别为跨域错误。 - SiriusAnkh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接