创建一个自定义会话处理程序在CakePHP是直截了当的。在这个示例中,我们将创建一个会话处理程序存储会话缓存(apc)和数据库。这给了我们最好的快速IO apc,无需担心会话缓存已满时蒸发。
首先我们需要创建自定义类,把它放在app /模型/数据源/会议/ ComboSession.php。类应该类似:
现在我们的应用程序将开始使用我们的自定义会话处理程序的阅读和写作会话数据。
首先我们需要创建自定义类,把它放在app /模型/数据源/会议/ ComboSession.php。类应该类似:
App::uses('DatabaseSession', 'Model/Datasource/Session');
class ComboSession extends DatabaseSession implements CakeSessionHandlerInterface {
public $cacheKey;
public function __construct() {
$this->cacheKey = Configure::read('Session.handler.cache');
parent::__construct();
}
// read data from the session.
public function read($id) {
$result = Cache::read($id, $this->cacheKey);
if ($result) {
return $result;
}
return parent::read($id);
}
// write data into the session.
public function write($id, $data) {
$result = Cache::write($id, $data, $this->cacheKey);
if ($result) {
return parent::write($id, $data);
}
return false;
}
// destroy a session.
public function destroy($id) {
Cache::delete($id, $this->cacheKey);
return parent::destroy($id);
}
// removes expired sessions.
public function gc($expires = null) {
return Cache::gc($this->cacheKey) && parent::gc($expires);
}
}
我们班扩展内置DatabaseSession所以我们不必复制所有的逻辑和行为。我们将每个操作缓存操作。这让我们从快速缓存获取会话,而不需要担心会发生什么当我们填充缓存。使用这个会话处理程序也简单。在你的核心。php让会话块看起来像下面的:
Configure::write('Session', array(
'defaults' => 'database',
'handler' => array(
'engine' => 'ComboSession',
'model' => 'Session',
'cache' => 'apc'
)
));
// Make sure to add a apc cache config
Cache::config('apc', array('Engine' => 'Apc'));
现在我们的应用程序将开始使用我们的自定义会话处理程序的阅读和写作会话数据。
class CakeSession