A super easy PHP Framework for web development!
https://github.com/exacti/phacil-framework
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
176 lines
3.5 KiB
176 lines
3.5 KiB
10 months ago
|
<?php
|
||
|
/**
|
||
|
* Copyright © 2024 ExacTI Technology Solutions. All rights reserved.
|
||
|
* GPLv3 General License.
|
||
|
* https://exacti.com.br
|
||
|
* Phacil PHP Framework - https://github.com/exacti/phacil-framework
|
||
|
*/
|
||
|
|
||
|
namespace Phacil\Framework\Session\Redis;
|
||
|
|
||
|
use Cm\RedisSession\Handler\ConfigInterface;
|
||
|
use Cm\RedisSession\Handler\LoggerInterface;
|
||
|
use Cm\RedisSession\ConnectionFailedException;
|
||
|
use Cm\RedisSession\ConcurrentConnectionsExceededException;
|
||
|
use Phacil\Framework\Exception;
|
||
|
|
||
|
class Handler implements \SessionHandlerInterface {
|
||
|
|
||
|
|
||
|
private $savePath;
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* @var \Cm\RedisSession\Handler[]
|
||
|
*/
|
||
|
private $connection;
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* @var \Cm\RedisSession\Handler\ConfigInterface
|
||
|
*/
|
||
|
private $config;
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* @var \Cm\RedisSession\Handler\LoggerInterface
|
||
|
*/
|
||
|
private $logger;
|
||
|
|
||
|
private $name;
|
||
|
|
||
|
/**
|
||
|
* @param ConfigInterface $config
|
||
|
* @param LoggerInterface $logger
|
||
|
* @param Filesystem $filesystem
|
||
|
* @throws Exception
|
||
|
*/
|
||
|
public function __construct(ConfigInterface $config, LoggerInterface $logger)
|
||
|
{
|
||
|
$this->config = $config;
|
||
|
$this->logger = $logger;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Get connection
|
||
|
*
|
||
|
* @return \Cm\RedisSession\Handler
|
||
|
* @throws Exception
|
||
|
*/
|
||
|
private function getConnection()
|
||
|
{
|
||
|
$pid = getmypid();
|
||
|
if (!isset($this->connection[$pid])) {
|
||
|
try {
|
||
|
//$this->connection[$pid] = new \Cm\RedisSession\Handler($this->config, $this->logger);
|
||
|
$this->connection[$pid] = new \Phacil\Framework\Session\Redis\AbstractCM\Handler($this->config, $this->logger);
|
||
|
} catch (ConnectionFailedException $e) {
|
||
|
throw new Exception(($e->getMessage()));
|
||
|
}
|
||
|
}
|
||
|
return $this->connection[$pid];
|
||
|
}
|
||
|
|
||
|
function setName($name){
|
||
|
$this->name = $name;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Open session
|
||
|
*
|
||
|
* @param string $savePath ignored
|
||
|
* @param string $sessionName ignored
|
||
|
* @return bool
|
||
|
* @throws Exception
|
||
|
*/
|
||
|
public function open($savePath, $sessionName)
|
||
|
{
|
||
|
return $this->getConnection()->open($savePath, $sessionName);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Fetch session data
|
||
|
*
|
||
|
* @param string $sessionId
|
||
|
* @return string
|
||
|
* @throws ConcurrentConnectionsExceededException
|
||
|
* @throws Exception
|
||
|
*/
|
||
|
public function read($sessionId)
|
||
|
{
|
||
|
try {
|
||
|
return $this->getConnection()->read($sessionId);
|
||
|
} catch (ConcurrentConnectionsExceededException $e) {
|
||
|
throw new Exception($e->getMessage(), 1);
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Update session
|
||
|
*
|
||
|
* @param string $sessionId
|
||
|
* @param string $sessionData
|
||
|
* @return boolean
|
||
|
* @throws Exception
|
||
|
*/
|
||
|
public function write($sessionId, $sessionData)
|
||
|
{
|
||
|
try {
|
||
|
//$this->getConnection()->setName($this->name);
|
||
|
$cha = $this->getConnection()->write($sessionId, $sessionData);
|
||
|
return $cha;
|
||
|
} catch (ConcurrentConnectionsExceededException $e) {
|
||
|
throw new Exception($e->getMessage(), 1);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Destroy session
|
||
|
*
|
||
|
* @param string $sessionId
|
||
|
* @return boolean
|
||
|
* @throws Exception
|
||
|
*/
|
||
|
public function destroy($sessionId)
|
||
|
{
|
||
|
return $this->getConnection()->destroy($sessionId);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Overridden to prevent calling getLifeTime at shutdown
|
||
|
*
|
||
|
* @return bool
|
||
|
* @throws Exception
|
||
|
*/
|
||
|
public function close()
|
||
|
{
|
||
|
return $this->getConnection()->close();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Garbage collection
|
||
|
*
|
||
|
* @param int $maxLifeTime ignored
|
||
|
* @return boolean
|
||
|
* @throws Exception
|
||
|
* @SuppressWarnings(PHPMD.ShortMethodName)
|
||
|
*/
|
||
|
public function gc($maxLifeTime)
|
||
|
{
|
||
|
return $this->getConnection()->gc($maxLifeTime);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the number of failed lock attempts
|
||
|
*
|
||
|
* @return int
|
||
|
* @throws Exception
|
||
|
*/
|
||
|
public function getFailedLockAttempts()
|
||
|
{
|
||
|
return $this->getConnection()->getFailedLockAttempts();
|
||
|
}
|
||
|
}
|