X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FCore%2FSession.php;h=c4fbb3f8c6d043b9764a0ef2623c64a92e2752d9;hb=3545e9cfa806dc747af3c45461242c81bf999b6f;hp=d9143c8809e1b1b8df215238fd3cd3585e24ffe8;hpb=4ae37c61966a7f4c055369ee8fd0d4bc20808fdb;p=friendica.git diff --git a/src/Core/Session.php b/src/Core/Session.php index d9143c8809..c4fbb3f8c6 100644 --- a/src/Core/Session.php +++ b/src/Core/Session.php @@ -1,72 +1,142 @@ . + * */ + 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 - * - * @author Hypolite Petovan */ 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) { - return isset($_SESSION[$name]); + DI::session()->remove($name); + } + + public static function clear() + { + 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. + * Return the user contact ID of a visitor for the given user ID they are visiting * - * @param string $name - * @param mixed $defaults - * @return mixed + * @param integer $uid User ID + * @return integer */ - public static function get($name, $defaults = null) + public static function getRemoteContactID($uid) { - if (isset($_SESSION)) { - $return = defaults($_SESSION, $name, $defaults); + $session = DI::session(); + + if (!empty($session->get('remote')[$uid])) { + $remote = $session->get('remote')[$uid]; } else { - $return = $defaults; + $remote = 0; + } + + $local_user = !empty($session->get('authenticated')) ? $session->get('uid') : 0; + + if (empty($remote) && ($local_user != $uid) && !empty($my_address = $session->get('my_address'))) { + $remote = Contact::getIdForURL($my_address, $uid, false); } - return $return; + return $remote; } - 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\User::isBlocked($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); } }