問題
アプリケーションのセッション管理にPhalcon\Session\Adapter\Redisを使用した際にSegmentation Faultが発生する。
原因
セッション情報が作成されていない段階でsession_start()した際に
session_set_save_handler()で登録されたwrite()が空文字を保存しようとしている。
対処法
dataの存在チェックを追加してcompielし直す。
redis.zep
(省略)
/**
* {@inheritdoc}
*/
public function write(string sessionId, string data)
{
// dataが空の場合は書き込まない
if empty data {
return;
}
this->_redis->save(sessionId, data, this->_lifetime);
}
非compileの場合(yum等でインストールした場合)はサブクラスを作成してoverrideする。
Redis.php
<?php
namespace MyApp\Session\Adapter;
class Redis extends \Phalcon\Session\Adapter\Redis
{
/**
* {@inheritdoc}
*/
public function write($sessionId, $data)
{
// dataが空の場合は書き込まない
if (empty($data)) {
return;
}
$this->_redis->save($sessionId, $data, $this->_lifetime);
}
}
応急処置な感が強いですが、一先ずこれで
環境
- PHP 5.6.18
- Phalcon 2.0.10