Facebook SDK + CodeIgniter sessions


Facebook SDK + CodeIgniter sessions

我使用的是CodeIgniter的内置会话类,因此我不希望Facebook SDK启动它自己的会话(通过session_start()并使用$_SESSION变量)。

有没有办法防止SDK使用本机会话,如果,如何使其使用CodeIgniter会话类?甚至可能吗?

这已经很晚了,但以防万一其他人遇到同样的问题。只需在自定义类中实现 PersistentDataHandler,如下所示:https://developers.facebook.com/docs/php/PersistentDataInterface/5.0.0

这是我实现的一个代码点火器版本。(注意:会话库是自动加载的,所以我省略了加载它。如果不是这种情况,请努力加载它)

use Facebook'PersistentData'PersistentDataInterface;
class CIPersistentDataHandler implements PersistentDataInterface
{
    public function __construct()
    {
       $this->ci =& get_instance();
    }
    /**
    * @var string Prefix to use for session variables.
    */
    protected $sessionPrefix = 'FBRLH_';
    /**
    * @inheritdoc
    */
    public function get($key)
    {
        return $this->ci->session->userdata($this->sessionPrefix.$key);
    }
    /**
    * @inheritdoc
    */
    public function set($key, $value)
    {
        $this->ci->session->set_userdata($this->sessionPrefix.$key, $value);
    }
}

然后像这样启用自定义类

$fb = new Facebook'Facebook([
  // . . .
  'persistent_data_handler' => new CIPersistentDataHandler(),
  // . . .
  ]);

注意(对于代码点火器版本 3 或更低版本)

不要忘记在决定设置Facebook类的任何地方包含自定义类和Facebook SDK。请参阅以下示例:

require_once APPPATH.'libraries/facebook-php-sdk/autoload.php';
require_once APPPATH.'libraries/CIPersistentDataHandler.php';
use Facebook'Facebook;
use Facebook'Authentication'AccessToken;
use Facebook'Exceptions'FacebookResponseException;
use Facebook'Exceptions'FacebookSDKException;
use Facebook'Helpers'FacebookJavaScriptHelper;
use Facebook'Helpers'FacebookRedirectLoginHelper;
class Facebooklogin {
    ...
    $fb = new Facebook'Facebook([
      // . . .
      'persistent_data_handler' => new CIPersistentDataHandler(),
      // . . .
      ]);
}

我希望这有帮助!