Your IP : 216.73.216.50


Current Path : /proc/1908984/root/proc/self/root/proc/self/root/proc/2508158/root/tmp/
Upload File :
Current File : //proc/1908984/root/proc/self/root/proc/self/root/proc/2508158/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);
        }
    }
}