スポンサーサイト

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

Facebook PHP SDKをZend_Sessionで使う

Facebook PHP SDKがバージョン3になって、クラス階層が基底クラスbase_facebook.php、派生クラスfacebook.phpとなりました。
ほとんどの機能は基底クラスのbase_facebook.phpにあるのですが、セッションにデータを保存する機能だけが派生クラスのfacebook.phpにあります。
facebook.phpのセッションは$_SESSIONを利用したものになっていますが、私は基本的にZend_Sessionを使うので、それを使うように修正してみました。
Zend_Sessionの基本的な設定は別のBootstrap的なphpで行っているので、ここではZend_Session_Namespaceのみ使用しています。
/**
* 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
{
/**
* 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 = new Zend_Session_Namespace('facebook');
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);
//$_SESSION[$session_var_name] = $value;
$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($_SESSION[$session_var_name]) ?
// $_SESSION[$session_var_name] : $default;
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($_SESSION[$session_var_name]);
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));
}
}
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)

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