class RedisSessionHandler extends AbstractSessionHandler
Redis based session storage handler based on the Redis class provided by the PHP redis extension.
public
|
|
open($savePath, $sessionName)
|
{@inheritdoc} | from AbstractSessionHandler |
protected
|
string |
doRead(string $sessionId)
|
No description | |
protected
|
bool |
doWrite(string $sessionId, string $data)
|
No description | |
protected
|
bool |
doDestroy(string $sessionId)
|
No description | |
public
|
|
validateId($sessionId)
|
{@inheritdoc} | from AbstractSessionHandler |
public
|
|
read($sessionId)
|
{@inheritdoc} | from AbstractSessionHandler |
public
|
|
write($sessionId, $data)
|
{@inheritdoc} | from AbstractSessionHandler |
public
|
|
destroy($sessionId)
|
{@inheritdoc} | from AbstractSessionHandler |
public
|
|
__construct(Redis|RedisArray|RedisCluster|Client $redis, array $options = array())
|
List of available options: * prefix: The prefix to use for the keys in order to avoid collision on the Redis server. | |
public
|
bool |
close()
|
{@inheritdoc} | |
public
|
bool |
gc($maxlifetime)
|
{@inheritdoc} | |
public
|
|
updateTimestamp($sessionId, $data)
|
{@inheritdoc} |
open()public open($savePath, $sessionName)
{@inheritdoc}
$savePath |
||
$sessionName |
doRead()protected string doRead(string $sessionId)
string |
$sessionId |
string |
doWrite()protected bool doWrite(string $sessionId, string $data)
string |
$sessionId |
|
string |
$data |
bool |
doDestroy()protected bool doDestroy(string $sessionId)
string |
$sessionId |
bool |
validateId()public validateId($sessionId)
{@inheritdoc}
$sessionId |
read()public read($sessionId)
{@inheritdoc}
$sessionId |
write()public write($sessionId, $data)
{@inheritdoc}
$sessionId |
||
$data |
destroy()public destroy($sessionId)
{@inheritdoc}
$sessionId |
__construct()public __construct(Redis|RedisArray|RedisCluster|Client $redis, array $options = array())
List of available options: * prefix: The prefix to use for the keys in order to avoid collision on the Redis server.
Redis|RedisArray|RedisCluster|Client |
$redis |
|
array |
$options |
An associative array of options |
| InvalidArgumentException | When unsupported client or options are passed |
close()public bool close()
{@inheritdoc}
bool |
gc()public bool gc($maxlifetime)
{@inheritdoc}
$maxlifetime |
bool |
updateTimestamp()public updateTimestamp($sessionId, $data)
{@inheritdoc}
$sessionId |
||
$data |
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\HttpFoundation\Session\Storage\Handler;
use Predis\Response\ErrorInterface;
/**
* Redis based session storage handler based on the Redis class
* provided by the PHP redis extension.
*
* @author Dalibor Karlović <dalibor@flexolabs.io>
*/
class RedisSessionHandler extends AbstractSessionHandler
{
private $redis;
/**
* @var string Key prefix for shared environments
*/
private $prefix;
/**
* List of available options:
* * prefix: The prefix to use for the keys in order to avoid collision on the Redis server.
*
* @param \Redis|\RedisArray|\RedisCluster|\Predis\Client $redis
* @param array $options An associative array of options
*
* @throws \InvalidArgumentException When unsupported client or options are passed
*/
public function __construct($redis, array $options = array())
{
if (!$redis instanceof \Redis && !$redis instanceof \RedisArray && !$redis instanceof \Predis\Client && !$redis instanceof RedisProxy) {
throw new \InvalidArgumentException(sprintf('%s() expects parameter 1 to be Redis, RedisArray, RedisCluster or Predis\Client, %s given', __METHOD__, is_object($redis) ? get_class($redis) : gettype($redis)));
}
if ($diff = array_diff(array_keys($options), array('prefix'))) {
throw new \InvalidArgumentException(sprintf('The following options are not supported "%s"', implode(', ', $diff)));
}
$this->redis = $redis;
$this->prefix = $options['prefix'] ?? 'sf_s';
}
/**
* {@inheritdoc}
*/
protected function doRead($sessionId): string
{
return $this->redis->get($this->prefix.$sessionId) ?: '';
}
/**
* {@inheritdoc}
*/
protected function doWrite($sessionId, $data): bool
{
$result = $this->redis->setEx($this->prefix.$sessionId, (int) ini_get('session.gc_maxlifetime'), $data);
return $result && !$result instanceof ErrorInterface;
}
/**
* {@inheritdoc}
*/
protected function doDestroy($sessionId): bool
{
$this->redis->del($this->prefix.$sessionId);
return true;
}
/**
* {@inheritdoc}
*/
public function close(): bool
{
return true;
}
/**
* {@inheritdoc}
*/
public function gc($maxlifetime): bool
{
return true;
}
/**
* {@inheritdoc}
*/
public function updateTimestamp($sessionId, $data)
{
return $this->redis->expire($this->prefix.$sessionId, (int) ini_get('session.gc_maxlifetime'));
}
}