<?php /** * @package Joomla.Platform * @subpackage Session * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE */ defined('JPATH_PLATFORM') or die; /** * APC session storage handler for PHP * * @link https://www.php.net/manual/en/function.session-set-save-handler.php * @since 3.9 * @deprecated 4.0 The CMS' Session classes will be replaced with the `joomla/session` package */ class JSessionStorageApcu extends JSessionStorage { /** * Constructor * * @param array $options Optional parameters * * @since 3.9 * @throws RuntimeException */ public function __construct($options = array()) { if (!self::isSupported()) { throw new RuntimeException('APCu Extension is not available', 404); } parent::__construct($options); } /** * Read the data for a particular session identifier from the * SessionHandler backend. * * @param string $id The session identifier. * * @return string The session data. * * @since 3.9 */ public function read($id) { $sess_id = 'sess_' . $id; return (string) apcu_fetch($sess_id); } /** * Write session data to the SessionHandler backend. * * @param string $id The session identifier. * @param string $session_data The session data. * * @return boolean True on success, false otherwise. * * @since 3.9 */ public function write($id, $session_data) { $sess_id = 'sess_' . $id; return apcu_store($sess_id, $session_data, ini_get('session.gc_maxlifetime')); } /** * Destroy the data for a particular session identifier in the SessionHandler backend. * * @param string $id The session identifier. * * @return boolean True on success, false otherwise. * * @since 3.9 */ public function destroy($id) { $sess_id = 'sess_' . $id; // The apcu_delete function returns false if the id does not exist return apcu_delete($sess_id = 'sess_' . $id) || !apcu_exists($sess_id = 'sess_' . $id); } /** * Test to see if the SessionHandler is available. * * @return boolean True on success, false otherwise. * * @since 3.9 */ public static function isSupported() { $supported = extension_loaded('apcu') && ini_get('apc.enabled'); // If on the CLI interface, the `apc.enable_cli` option must also be enabled if ($supported && php_sapi_name() === 'cli') { $supported = ini_get('apc.enable_cli'); } return (bool) $supported; } }