Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何获得长寿命的Facebook会话?_Php_Facebook_Facebook Graph Api_Facebook Php Sdk - Fatal编程技术网

Php 如何获得长寿命的Facebook会话?

Php 如何获得长寿命的Facebook会话?,php,facebook,facebook-graph-api,facebook-php-sdk,Php,Facebook,Facebook Graph Api,Facebook Php Sdk,从去年开始,我一直在开发一个Facebook应用程序。在Facebook 2012年12月发生变化之前,它运行良好。但现在我在Facebook上遇到了一个问题。 我已将旧SDK替换为新SDK: 避免尝试重用已用过的授权代码 因此,当授权码用完时,用户会话将从我的站点过期。(之后我得到授权错误) 用户每5-6分钟就会从我的应用程序中注销一次,因此我必须再次将用户重定向到loginurl并刷新页面,这对我的站点不好,因为我在所有链接上使用调用 我已经看到一些应用程序在12月的变化后也运行良好。(例如

从去年开始,我一直在开发一个Facebook应用程序。在Facebook 2012年12月发生变化之前,它运行良好。但现在我在Facebook上遇到了一个问题。 我已将旧SDK替换为新SDK:

避免尝试重用已用过的授权代码

因此,当授权码用完时,用户会话将从我的站点过期。(之后我得到授权错误)

用户每5-6分钟就会从我的应用程序中注销一次,因此我必须再次将用户重定向到loginurl并刷新页面,这对我的站点不好,因为我在所有链接上使用调用

我已经看到一些应用程序在12月的变化后也运行良好。(例如,Wrapp.com)。Wrapp.com不会在身份验证代码过期后重定向用户。登录10分钟后,我也可以使用Wrapp.com在Facebook上发帖,而无需重定向。 Wrapp.com如何处理身份验证?解决方案是什么?

您有两种方法:

  • 您可以使用中描述的场景4技巧扩展用户访问令牌

  • 在我的例子中,我将应用程序设置为桌面,因此我有一个令牌将在90天后过期:


  • 使用PHP SDK避免使用Ajax和Iframe页面使会话过期


    经过大量的研究和测试,如果调用的页面被多次加载,那么在iframe或加载了canvas或page tab的Ajax页面中使用phpsdk“3.2.2”将清除应用程序的会话

    示例:

    您的页面选项卡在其自身包含的PHPSDK中加载一个iframe,并且您的用户与iframe交互。第二个页面加载时的iframe将清除当前应用程序会话

    解决方案:

    从应用程序中的Ajax和iframe页面中删除PHP SDK,并改用


    如果应用程序中的iframe页面需要用户身份验证信息,建议在用户登录页面选项卡/画布或上载用户身份验证时创建cookie或会话。在需要用户查看或交互的地方使用此切换内容。

    注意,您的令牌应默认为2小时。如果它在几分钟内到期,这意味着您没有在ajax页面上设置访问令牌,它正在清除会话。非常感谢@Shawn的回答。但我有一个问题。我必须在ajax页面上获取用户的好友列表,这需要用户访问令牌。如何在ajax页面上获取用户访问令牌,而我不能包含facebook sdk?我可以将用户访问令牌存储到会话中,并在使用curl调用api时使用它吗?如果在主页上设置了访问令牌,ajax页面应该能够使用其当前会话调用它$access_token=$_会话['fb_YourAppIdHere_access_token'];