スポンサーサイト

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

MongoDBに書くPHP用のセッションハンドラー

MongoDBに書くPHPのセッションハンドラーです。
フレームワークに依存しないので、どれでも使えます。
composerに対応しているので、インストールもらくちんです。
"aoyagikouhei/mongo-session-handler": "0.0.1"

使い方は
\MongoSession\Handler::initSession();
だけでOK。

ただし、PHP5.4からサポートされたSessionHandlerInterfaceを使っているので、これよりも前のPHPでは動きません。
<?php
namespace MongoSession;

class Handler implements \SessionHandlerInterface
{
protected $collection;
protected $params;

public static function initSession($params=array()) {
$handler = new \MongoSession\Handler($params);
session_set_save_handler($handler, true);
session_start();
}

public function __construct($params=array())
{
$this->params = array_merge(
[
'db_name' => 'test',
'collection_name' => 'session',
'server' => 'mongodb://localhost:27017',
'options' => ['connect' => true],
'write_options' => []
],
$params);
$this->params['remove_options'] = array_merge(
$this->params['write_options'],
['justOne' => true]
);
$dbName = $this->params['db_name'];
$collectionName = $this->params['collection_name'];
$this->collection = (new \MongoClient(
$this->params['server'],
$this->params['options']
))
->$dbName
->$collectionName;
}

public function open($savePath, $sessionName)
{
return true;
}

public function close()
{
return true;
}

public function read($id)
{
return (string)$this->collection->findOne(
['_id' => $id],
['d' => true]
)['d'];
}

private function getResult($result) {
return is_bool($result) ? $result : 1.0 === $result['ok'];
}

public function write($id, $data)
{
return $this->getResult($this->collection->save(
['_id' => $id, 'd' => $data, 't' => new \MongoDate()],
$this->params['write_options']
));
}

public function destroy($id)
{
return $this->getResult($this->collection->remove(
['_id' => $id],
$this->params['remove_options']
));
}

public function gc($maxlifetime)
{
return $this->getResult($this->collection->remove(
['t' => ['$lte' => new \MongoDate(time() - $maxlifetime)]],
$this->params['write_options']
));
}
}
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


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

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