166 lines
3.2 KiB
PHP
166 lines
3.2 KiB
PHP
<?php
|
|
/**
|
|
* @package FOF
|
|
* @copyright Copyright (c)2010-2022 Nicholas K. Dionysopoulos / Akeeba Ltd
|
|
* @license GNU General Public License version 3, or later
|
|
*/
|
|
|
|
namespace FOF40\Utils;
|
|
|
|
defined('_JEXEC') || die;
|
|
|
|
use FOF40\Encrypt\Randval;
|
|
use JSessionHandlerInterface;
|
|
use RuntimeException;
|
|
|
|
/**
|
|
* CLI session handler for Joomla 3.x
|
|
*/
|
|
class CliSessionHandler implements JSessionHandlerInterface
|
|
{
|
|
private $id;
|
|
|
|
private $name = 'clisession';
|
|
|
|
public function __construct()
|
|
{
|
|
$this->makeId();
|
|
}
|
|
|
|
/**
|
|
* Starts the session.
|
|
*
|
|
* @return boolean True if started.
|
|
*
|
|
* @throws RuntimeException If something goes wrong starting the session.
|
|
* @since 3.4.8
|
|
*/
|
|
public function start()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Checks if the session is started.
|
|
*
|
|
* @return boolean True if started, false otherwise.
|
|
*
|
|
* @since 3.4.8
|
|
*/
|
|
public function isStarted()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Returns the session ID
|
|
*
|
|
* @return string The session ID
|
|
*
|
|
* @since 3.4.8
|
|
*/
|
|
public function getId()
|
|
{
|
|
return $this->id;
|
|
}
|
|
|
|
/**
|
|
* Sets the session ID
|
|
*
|
|
* @param string $id The session ID
|
|
*
|
|
* @return void
|
|
*
|
|
* @since 3.4.8
|
|
*/
|
|
public function setId($id)
|
|
{
|
|
$this->id = $id;
|
|
}
|
|
|
|
/**
|
|
* Returns the session name
|
|
*
|
|
* @return mixed The session name.
|
|
*
|
|
* @since 3.4.8
|
|
*/
|
|
public function getName()
|
|
{
|
|
return $this->name;
|
|
}
|
|
|
|
/**
|
|
* Sets the session name
|
|
*
|
|
* @param string $name The name of the session
|
|
*
|
|
* @return void
|
|
*
|
|
* @since 3.4.8
|
|
*/
|
|
public function setName($name)
|
|
{
|
|
$this->name = $name;
|
|
}
|
|
|
|
/**
|
|
* Regenerates ID that represents this storage.
|
|
*
|
|
* Note regenerate+destroy should not clear the session data in memory only delete the session data from persistent
|
|
* storage.
|
|
*
|
|
* @param boolean $destroy Destroy session when regenerating?
|
|
* @param integer $lifetime Sets the cookie lifetime for the session cookie. A null value will leave the system
|
|
* settings unchanged,
|
|
* 0 sets the cookie to expire with browser session. Time is in seconds, and is not a
|
|
* Unix timestamp.
|
|
*
|
|
* @return boolean True if session regenerated, false if error
|
|
*
|
|
* @since 3.4.8
|
|
*/
|
|
public function regenerate($destroy = false, $lifetime = null)
|
|
{
|
|
$this->makeId();
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Force the session to be saved and closed.
|
|
*
|
|
* This method must invoke session_write_close() unless this interface is used for a storage object design for unit
|
|
* or functional testing where a real PHP session would interfere with testing, in which case it should actually
|
|
* persist the session data if required.
|
|
*
|
|
* @return void
|
|
*
|
|
* @throws RuntimeException If the session is saved without being started, or if the session is already closed.
|
|
* @since 3.4.8
|
|
* @see session_write_close()
|
|
*/
|
|
public function save()
|
|
{
|
|
// No operation. This is a CLI session, we save nothing.
|
|
}
|
|
|
|
/**
|
|
* Clear all session data in memory.
|
|
*
|
|
* @return void
|
|
*
|
|
* @since 3.4.8
|
|
*/
|
|
public function clear()
|
|
{
|
|
$this->makeId();
|
|
}
|
|
|
|
private function makeId()
|
|
{
|
|
$rand = new Randval();
|
|
|
|
$this->id = md5($rand->generate(32));
|
|
}
|
|
} |