| Current Path : /proc/1908984/root/proc/self/root/proc/self/root/proc/2404962/root/tmp/ |
| Current File : //proc/1908984/root/proc/self/root/proc/self/root/proc/2404962/root/tmp/phpiRLFD4 |
<?php
namespace Nextend\Framework\Session;
use Nextend\Framework\Plugin;
use Nextend\Framework\Request\Request;
abstract class AbstractStorage {
protected static $expire = 86400; // 1 day
protected static $salt = 'nextendSalt';
protected $hash;
protected $storage = array();
public $storageChanged = false;
public function __construct($userIdentifier) {
$this->register();
$cookie = Request::$COOKIE->getCmd('nextendsession');
if ($cookie === '' || substr($cookie, 0, 2) != 'n2' || !preg_match('/^[a-f0-9]{32}$/', substr($cookie, 2))) {
$this->hash = 'n2' . md5(self::$salt . $userIdentifier);
setcookie('nextendsession', $this->hash, time() + self::$expire, Request::$SERVER->getVar('HTTP_HOST'));
Request::$COOKIE->set('nextendsession', $this->hash);
} else {
$this->hash = $cookie;
}
$this->load();
}
/**
* Load the whole session
* $this->storage = json_decode(result for $this->hash);
*/
protected abstract function load();
/**
* Store the whole session
* $this->hash json_encode($this->storage);
*/
protected abstract function store();
public function get($key, $default = '') {
return isset($this->storage[$key]) ? $this->storage[$key] : $default;
}
public function set($key, $value) {
$this->storageChanged = true;
$this->storage[$key] = $value;
}
public function delete($key) {
$this->storageChanged = true;
unset($this->storage[$key]);
}
/**
* Register our method for PHP shut down
*/
protected function register() {
Plugin::addAction('exit', array(
$this,
'shutdown'
));
}
/**
* When PHP shuts down, we have to save our session's data if the data changed
*/
public function shutdown() {
Plugin::doAction('beforeSessionSave');
if ($this->storageChanged) {
$this->store();
}
}
}<?php
namespace Nextend\Framework\Session;
use Nextend\Framework\Session\Joomla\JoomlaStorage;
use Nextend\Framework\Session\WordPress\WordPressStorage;
class Session {
/**
* @var $storage AbstractStorage
*/
private static $storage = false;
private static function getStorage() {
if (!self::$storage) {
self::$storage = new JoomlaStorage();
}
return self::$storage;
}
public static function get($key, $default = null) {
return self::getStorage()
->get($key, $default);
}
public static function set($key, $value) {
self::getStorage()
->set($key, $value);
}
public static function delete($key) {
self::getStorage()
->delete($key);
}
}<?php
namespace Nextend\Framework\Session\Joomla;
use Joomla\CMS\Factory;
use Nextend\Framework\Session\AbstractStorage;
class JoomlaStorage extends AbstractStorage {
public function __construct() {
parent::__construct(Factory::getUser()->id);
}
/**
* Load the whole session
*/
protected function load() {
$stored = Factory::getSession()
->get($this->hash);
if (!is_array($stored)) {
$stored = array();
}
$this->storage = $stored;
}
/**
* Store the whole session
*/
protected function store() {
$session = Factory::getSession();
if (count($this->storage) > 0) {
$session->set($this->hash, $this->storage);
} else {
$session->set($this->hash, null);
}
}
}