WARNING: THIS SITE IS A MIRROR OF GITHUB.COM / IT CANNOT LOGIN OR REGISTER ACCOUNTS / THE CONTENTS ARE PROVIDED AS-IS / THIS SITE ASSUMES NO RESPONSIBILITY FOR ANY DISPLAYED CONTENT OR LINKS / IF YOU FOUND SOMETHING MAY NOT GOOD FOR EVERYONE, CONTACT ADMIN AT ilovescratch@foxmail.com
Skip to content
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 20 additions & 3 deletions src/Cm/RedisSession/Handler.php
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,11 @@ class Handler implements \SessionHandlerInterface
* Session prefix
*/
const SESSION_PREFIX = 'sess_';

/**
* Additional Session prefix
*/
const SESSION_PREFIX_ADDITIONAL = '';

/**
* Bots get shorter session lifetimes
Expand Down Expand Up @@ -253,6 +258,13 @@ class Handler implements \SessionHandlerInterface
* @var boolean
*/
private $_readOnly;

/**
* Additional Configurable Prefix for Session
*
* @var string
*/
private $_prefixAdditional;

/**
* @param ConfigInterface $config
Expand Down Expand Up @@ -284,6 +296,7 @@ public function __construct(ConfigInterface $config, LoggerInterface $logger, $r
$this->_failAfter = $this->config->getFailAfter() ?: self::DEFAULT_FAIL_AFTER;
$this->_maxLifetime = $this->config->getMaxLifetime() ?: self::DEFAULT_MAX_LIFETIME;
$this->_minLifetime = $this->config->getMinLifetime() ?: self::DEFAULT_MIN_LIFETIME;
$this->_prefixAdditional = $this->config->getPrefix() ?: self::SESSION_PREFIX_ADDITIONAL;
$this->_useLocking = ! $this->config->getDisableLocking();

// Use sleep time multiplier so fail after time is in seconds
Expand Down Expand Up @@ -411,7 +424,7 @@ protected function hasConnection()
public function read($sessionId)
{
// Get lock on session. Increment the "lock" field and if the new value is 1, we have the lock.
$sessionId = self::SESSION_PREFIX.$sessionId;
$sessionId = self::SESSION_PREFIX.$this->_prefixAdditional.$sessionId;
$tries = $waiting = $lock = 0;
$lockPid = $oldLockPid = null; // Restart waiting for lock when current lock holder changes
$detectZombies = false;
Expand Down Expand Up @@ -616,6 +629,8 @@ public function read($sessionId)
*/
public function write($sessionId, $sessionData)
{
$sessionId = self::SESSION_PREFIX.$this->_prefixAdditional.$sessionId;

if ($this->_sessionWritten || $this->_readOnly) {
$this->_log(sprintf(($this->_sessionWritten ? "Repeated" : "Read-only") . " session write detected; skipping for ID %s", $sessionId));
return true;
Expand All @@ -628,7 +643,7 @@ public function write($sessionId, $sessionData)
if($this->_dbNum) $this->_redis->select($this->_dbNum); // Prevent conflicts with other connections?

if ( ! $this->_useLocking
|| ( ! ($pid = $this->_redis->hGet('sess_'.$sessionId, 'pid')) || $pid == $this->_getPid())
|| ( ! ($pid = $this->_redis->hGet($sessionId, 'pid')) || $pid == $this->_getPid())
) {
$this->_writeRawSession($sessionId, $sessionData, $this->getLifeTime());
$this->_log(sprintf("Data written to ID %s in %.5f seconds", $sessionId, (microtime(true) - $timeStart)));
Expand Down Expand Up @@ -661,6 +676,8 @@ public function write($sessionId, $sessionData)
*/
public function destroy($sessionId)
{

= self::SESSION_PREFIX.$this->_prefixAdditional.$sessionId;
$this->_log(sprintf("Destroying ID %s", $sessionId));
$this->_redis->pipeline();
if($this->_dbNum) $this->_redis->select($this->_dbNum);
Expand Down Expand Up @@ -828,7 +845,7 @@ protected function _decodeData($data)
*/
protected function _writeRawSession($id, $data, $lifetime)
{
$sessionId = 'sess_' . $id;
$sessionId = self::SESSION_PREFIX.$this->_prefixAdditional.$sessionId;
$this->_redis->pipeline()
->select($this->_dbNum)
->hMSet($sessionId, array(
Expand Down