X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FCore%2FSession.php;h=0af4d344b11337c019bc27ea3bdba480aa09ab86;hb=f97a358a9b0d73e96c6dd52ea304574d0bbff039;hp=d9143c8809e1b1b8df215238fd3cd3585e24ffe8;hpb=306688057d64a156969eff79fff546c82d8e616a;p=friendica.git diff --git a/src/Core/Session.php b/src/Core/Session.php index d9143c8809..0af4d344b1 100644 --- a/src/Core/Session.php +++ b/src/Core/Session.php @@ -5,8 +5,10 @@ */ namespace Friendica\Core; -use Friendica\Core\Session\CacheSessionHandler; -use Friendica\Core\Session\DatabaseSessionHandler; +use Friendica\Database\DBA; +use Friendica\DI; +use Friendica\Model\Contact; +use Friendica\Util\Strings; /** * High-level Session service class @@ -18,55 +20,101 @@ class Session public static $exists = false; public static $expire = 180000; - public static function init() + public static function exists($name) { - ini_set('session.gc_probability', 50); - ini_set('session.use_only_cookies', 1); - ini_set('session.cookie_httponly', 1); + return DI::session()->exists($name); + } - if (Config::get('system', 'ssl_policy') == SSL_POLICY_FULL) { - ini_set('session.cookie_secure', 1); - } + public static function get($name, $defaults = null) + { + return DI::session()->get($name, $defaults); + } - $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(); - } else { - $SessionHandler = new DatabaseSessionHandler(); - } + public static function set($name, $value) + { + DI::session()->set($name, $value); + } - session_set_save_handler($SessionHandler); - } + public static function setMultiple(array $values) + { + DI::session()->setMultiple($values); } - public static function exists($name) + public static function remove($name) + { + DI::session()->remove($name); + } + + public static function clear() { - return isset($_SESSION[$name]); + DI::session()->clear(); } /** - * 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. + * Returns contact ID for given user ID * - * @param string $name - * @param mixed $defaults - * @return mixed + * @param integer $uid User ID + * @return integer Contact ID of visitor for given user ID */ - public static function get($name, $defaults = null) + public static function getRemoteContactID($uid) { - if (isset($_SESSION)) { - $return = defaults($_SESSION, $name, $defaults); - } else { - $return = $defaults; + $session = DI::session(); + + if (empty($session->get('remote')[$uid])) { + return 0; } - return $return; + return $session->get('remote')[$uid]; } - public static function set($name, $value) + /** + * Returns User ID for given contact ID of the visitor + * + * @param integer $cid Contact ID + * @return integer User ID for given contact ID of the visitor + */ + public static function getUserIDForVisitorContactID($cid) { - $_SESSION[$name] = $value; + $session = DI::session(); + + if (empty($session->get('remote'))) { + return false; + } + + return array_search($cid, $session->get('remote')); + } + + /** + * Set the session variable that contains the contact IDs for the visitor's contact URL + * + * @param string $url Contact URL + */ + public static function setVisitorsContacts() + { + $session = DI::session(); + + $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->set('remote', [$contact['uid'] => $contact['id']]); + } + DBA::close($remote_contacts); + } + + /** + * Returns if the current visitor is authenticated + * + * @return boolean "true" when visitor is either a local or remote user + */ + public static function isAuthenticated() + { + $session = DI::session(); + + return $session->get('authenticated', false); } }