]> git.mxchange.org Git - friendica.git/blobdiff - src/Core/Session.php
Merge branch 'master' 2019.12 into develop
[friendica.git] / src / Core / Session.php
index 140781d1c644e659107803f1e71e4f0754eb6755..0557ce81b7554ad4882977b765c32c9cc3fa540e 100644 (file)
  */
 namespace Friendica\Core;
 
-use Friendica\App;
 use Friendica\BaseObject;
-use Friendica\Core\Cache\ICache;
-use Friendica\Core\Session\CacheSessionHandler;
-use Friendica\Core\Session\DatabaseSessionHandler;
-use Friendica\Database\Database;
+use Friendica\Core\Session\ISession;
 use Friendica\Database\DBA;
 use Friendica\Model\Contact;
-use Friendica\Model\User;
 use Friendica\Util\Strings;
-use Psr\Log\LoggerInterface;
 
 /**
  * High-level Session service class
  *
  * @author Hypolite Petovan <hypolite@mrpetovan.com>
  */
-class Session
+class Session extends BaseObject
 {
        public static $exists = false;
        public static $expire = 180000;
 
-       public static function init()
-       {
-               ini_set('session.gc_probability', 50);
-               ini_set('session.use_only_cookies', 1);
-               ini_set('session.cookie_httponly', 1);
-
-               if (Config::get('system', 'ssl_policy') == App\BaseURL::SSL_POLICY_FULL) {
-                       ini_set('session.cookie_secure', 1);
-               }
-
-               $session_handler = Config::get('system', 'session_handler', 'database');
-               if ($session_handler != 'native') {
-                       if ($session_handler == 'cache' && Config::get('system', 'cache_driver', 'database') != 'database') {
-                               $SessionHandler = new CacheSessionHandler(
-                                       BaseObject::getClass(ICache::class),
-                                       BaseObject::getClass(LoggerInterface::class),
-                                       $_SERVER
-                               );
-                       } else {
-                               $SessionHandler = new DatabaseSessionHandler(
-                                       BaseObject::getClass(Database::class),
-                                       BaseObject::getClass(LoggerInterface::class),
-                                       $_SERVER
-                               );
-                       }
-
-                       session_set_save_handler($SessionHandler);
-               }
-       }
-
        public static function exists($name)
        {
-               return isset($_SESSION[$name]);
+               return self::getClass(ISession::class)->exists($name);
        }
 
-       /**
-        * Retrieves a key from the session super global or the defaults if the key is missing or the value is falsy.
-        *
-        * Handle the case where session_start() hasn't been called and the super global isn't available.
-        *
-        * @param string $name
-        * @param mixed $defaults
-        * @return mixed
-        */
        public static function get($name, $defaults = null)
        {
-               return $_SESSION[$name] ?? $defaults;
+               return self::getClass(ISession::class)->get($name, $defaults);
        }
 
-       /**
-        * Sets a single session variable.
-        * Overrides value of existing key.
-        *
-        * @param string $name
-        * @param mixed $value
-        */
        public static function set($name, $value)
        {
-               $_SESSION[$name] = $value;
+               self::getClass(ISession::class)->set($name, $value);
        }
 
-       /**
-        * Sets multiple session variables.
-        * Overrides values for existing keys.
-        *
-        * @param array $values
-        */
        public static function setMultiple(array $values)
        {
-               $_SESSION = $values + $_SESSION;
+               self::getClass(ISession::class)->setMultiple($values);
        }
 
-       /**
-        * Removes a session variable.
-        * Ignores missing keys.
-        *
-        * @param $name
-        */
        public static function remove($name)
        {
-               unset($_SESSION[$name]);
+               self::getClass(ISession::class)->remove($name);
        }
 
-       /**
-        * Clears the current session array
-        */
        public static function clear()
        {
-               session_unset();
-               session_start();
-               $_SESSION = [];
+               self::getClass(ISession::class)->clear();
        }
 
        /**
@@ -128,11 +59,14 @@ class Session
         */
        public static function getRemoteContactID($uid)
        {
-               if (empty($_SESSION['remote'][$uid])) {
+               /** @var ISession $session */
+               $session = self::getClass(ISession::class);
+
+               if (empty($session->get('remote')[$uid])) {
                        return false;
                }
 
-               return $_SESSION['remote'][$uid];
+               return $session->get('remote')[$uid];
        }
 
        /**
@@ -143,11 +77,14 @@ class Session
         */
        public static function getUserIDForVisitorContactID($cid)
        {
-               if (empty($_SESSION['remote'])) {
+               /** @var ISession $session */
+               $session = self::getClass(ISession::class);
+
+               if (empty($session->get('remote'))) {
                        return false;
                }
 
-               return array_search($cid, $_SESSION['remote']);
+               return array_search($cid, $session->get('remote'));
        }
 
        /**
@@ -157,15 +94,18 @@ class Session
         */
        public static function setVisitorsContacts()
        {
-               $_SESSION['remote'] = [];
+               /** @var ISession $session */
+               $session = self::getClass(ISession::class);
 
-               $remote_contacts = DBA::select('contact', ['id', 'uid'], ['nurl' => Strings::normaliseLink($_SESSION['my_url']), 'rel' => [Contact::FOLLOWER, Contact::FRIEND], 'self' => false]);
+               $session->set('remote', []);
+
+               $remote_contacts = DBA::select('contact', ['id', 'uid'], ['nurl' => Strings::normaliseLink($session->get('my_url')), 'rel' => [Contact::FOLLOWER, Contact::FRIEND], 'self' => false]);
                while ($contact = DBA::fetch($remote_contacts)) {
                        if (($contact['uid'] == 0) || Contact::isBlockedByUser($contact['id'], $contact['uid'])) {
                                continue;
                        }
 
-                       $_SESSION['remote'][$contact['uid']] = $contact['id'];
+                       $session->set('remote', [$contact['uid'] => $contact['id']]);
                }
                DBA::close($remote_contacts);
        }
@@ -177,23 +117,9 @@ class Session
         */
        public static function isAuthenticated()
        {
-               if (empty($_SESSION['authenticated'])) {
-                       return false;
-               }
-
-               return $_SESSION['authenticated'];
-       }
+               /** @var ISession $session */
+               $session = self::getClass(ISession::class);
 
-       /**
-        * @brief Kills the "Friendica" cookie and all session data
-        */
-       public static function delete()
-       {
-               /** @var User\Cookie $cookie */
-               $cookie = BaseObject::getClass(User\Cookie::class);
-               $cookie->clear();
-               $_SESSION = [];
-               session_unset();
-               session_destroy();
+               return $session->get('authenticated', false);
        }
 }