
我发现,只要在生成登录URL之前启用了PHP会话,并且Facebook最终重定向到脚本的顶部,它就可以在不设置cookie的情况下正常运行。这是使用SDK的5.1版本。
在这两个脚本的顶部,我添加了…
if(!session_id()) { session_start();}…而且“行之有效”。
这是一个对我有用的准系统完整示例:
auth.php
if (!session_id()) { session_start();}$oFB = new FacebookFacebook([ 'app_id' => FACEBOOK_APP_ID, 'app_secret' => FACEBOOK_APP_SECRET]);$oHelper = self::$oFB->getRedirectLoginHelper();$sURL = $oHelper->getLoginUrl(FACEBOOK_AUTH_CALLBACK, FACEBOOK_PERMISSIONS);// Redirect or show link to user.auth_callback.php
if (!session_id()) { session_start();}$oFB = new FacebookFacebook([ 'app_id' => FACEBOOK_APP_ID, 'app_secret' => FACEBOOK_APP_SECRET]);$oHelper = self::$oFB->getRedirectLoginHelper();$oAccessToken = $oHelper->getAccessToken();if ($oAccessToken !== null) { $oResponse = self::$oFB->get('/me?fields=id,name,email', $oAccessToken); print_r($oResponse->getGraphUser());}为什么?另外,在回购文档中对此进行了说明。
警告:FacebookRedirectLoginHelper使用会话来存储CSRF值。在调用getLoginUrl()方法之前,需要确保已启用会话。通常,这在大多数Web框架中都是自动完成的,但是如果您不使用Web框架,则可以添加session_start();。到您的login.php和login-
callback.php脚本的顶部。您可以覆盖默认的会话处理-请参阅下面的扩展点。
我要添加此注释,因为如果您碰巧正在运行自己的会话管理或并行运行多个Web服务器,请牢记这一点很重要。在这种情况下,依靠php的默认会话方法将永远无法工作。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)