スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Facebook PHP SDKをYiiのセッションで使う

(追記)
Ver3.2に対応しました。
YiiでFacebookSDK3.2を使う

Facebook PHP SDKのfacebook.phpを修正します。
コンストラクターでsessionオブジェクトを取得して、それを使ってセッション周りのコードを書き換えています。
またclearAllSessionを追加しました。

前回のMongoDBセッションを使えば、Webサーバを複数台用意してもセッションを引き継ぐことができるようになります。

<?php
/**
* Copyright 2011 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/

require_once "base_facebook.php";

/**
* Extends the BaseFacebook class with the intent of using
* PHP sessions to store user ids and access tokens.
*/
class Facebook extends BaseFacebook
{
private $session;

/**
* Identical to the parent constructor, except that
* we start a PHP session to store the user ID and
* access token if during the course of execution
* we discover them.
*
* @param Array $config the application configuration.
* @see BaseFacebook::__construct in facebook.php
*/
public function __construct($config) {
/*
if (!session_id()) {
session_start();
}
*/
$this->
session = Yii::app()->getSession();
parent::__construct($config);
}

protected static $kSupportedKeys =
array('state', 'code', 'access_token', 'user_id');

/**
* Provides the implementations of the inherited abstract
* methods. The implementation uses PHP sessions to maintain
* a store for authorization codes, user ids, CSRF states, and
* access tokens.
*/
protected function setPersistentData($key, $value) {
if (!in_array($key, self::$kSupportedKeys)) {
self::errorLog('Unsupported key passed to setPersistentData.');
return;
}

$session_var_name = $this->constructSessionVariableName($key);
$this->session[$session_var_name] = $value;
}

protected function getPersistentData($key, $default = false) {
if (!in_array($key, self::$kSupportedKeys)) {
self::errorLog('Unsupported key passed to getPersistentData.');
return $default;
}

$session_var_name = $this->constructSessionVariableName($key);
return isset($this->session[$session_var_name]) ?
$this->session[$session_var_name] : $default;
}

protected function clearPersistentData($key) {
if (!in_array($key, self::$kSupportedKeys)) {
self::errorLog('Unsupported key passed to clearPersistentData.');
return;
}

$session_var_name = $this->constructSessionVariableName($key);
unset($this->session[$session_var_name]);
}

protected function clearAllPersistentData() {
foreach (self::$kSupportedKeys as $key) {
$this->clearPersistentData($key);
}
}

protected function constructSessionVariableName($key) {
return implode('_', array('fb',
$this->getAppId(),
$key));
}

public function clearAllSession() {
$this->clearAllPersistentData();
}
}
スポンサーサイト
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。