Files
server/usr/share/psa-pear/pear/php/Horde/Session/Null.php
2026-01-07 20:52:11 +01:00

128 lines
3.3 KiB
PHP

<?php
/**
* Copyright 2010-2017 Horde LLC (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (LGPL). If you
* did not receive this file, see http://www.horde.org/licenses/lgpl21.
*
* @category Horde
* @copyright 2010-2017 Horde LLC
* @license http://www.horde.org/licenses/lgpl21 LGPL 2.1
* @package Core
*/
/**
* The null driver provides a set of methods for handling the administration
* and contents of the Horde session variable when the PHP session is not
* desired. Needed so things like application authentication can work within a
* single HTTP request when we don't need the overhead of a full PHP session.
*
* @author Michael Slusarz <slusarz@horde.org>
* @category Horde
* @copyright 2010-2017 Horde LLC
* @license http://www.horde.org/licenses/lgpl21 LGPL 2.1
* @package Core
*/
class Horde_Session_Null extends Horde_Session implements Horde_Shutdown_Task
{
/**
* Constructor.
*/
public function __construct()
{
// Store session data internally.
$this->_data = array();
}
/**
* Shutdown tasks.
*/
public function shutdown()
{
$this->destroy();
}
/**
*/
public function setup($start = true, $cache_limiter = null,
$session_id = null)
{
global $conf;
// Set this here, since we actually do start a php session. Even though
// it gets closed immediately, it can still create a session file on
// the same session backend as the globally configured Horde sessions.
// This may help clean up the large number of session files that can
// be created by things like ActiveSync.
if (!empty($conf['session']['timeout'])) {
ini_set('session.gc_maxlifetime', $conf['session']['timeout']);
}
session_cache_limiter(is_null($cache_limiter) ? $conf['session']['cache_limiter'] : $cache_limiter);
$this->sessionHandler = new Horde_Support_Stub();
if ($start) {
$this->start();
$this->_start();
}
}
/**
*/
public function start()
{
/* Limit session ID to 32 bytes. Session IDs are NOT cryptographically
* secure hashes. Instead, they are nothing more than a way to
* generate random strings. */
ini_set('session.hash_function', 0);
ini_set('session.hash_bits_per_character', 5);
// We must start a session to ensure that session_id() is available,
// but since we don't actually need to write to it, close it at once
// to avoid session lock issues.
session_start();
session_write_close();
Horde_Shutdown::add($this);
}
protected function _start()
{
$this->_active = true;
$this->_data[Horde_Session::BEGIN] = time();
}
/**
*/
public function clean()
{
if ($this->_cleansession) {
return false;
}
session_start();
session_regenerate_id(true);
session_write_close();
$this->destroy();
$this->_start();
return true;
}
/**
*/
public function close()
{
$this->_active = false;
}
/**
*/
public function destroy()
{
session_unset();
$this->_data = array();
$this->_cleansession = true;
}
}