X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FCore%2FSession.php;h=c4fbb3f8c6d043b9764a0ef2623c64a92e2752d9;hb=3545e9cfa806dc747af3c45461242c81bf999b6f;hp=542307a5ca4a2d27b6acb60f2f2d727f8e47737b;hpb=54392fab817a1a65175936b6c49c85ad054ff0fb;p=friendica.git diff --git a/src/Core/Session.php b/src/Core/Session.php index 542307a5ca..c4fbb3f8c6 100644 --- a/src/Core/Session.php +++ b/src/Core/Session.php @@ -1,127 +1,92 @@ . + * */ + namespace Friendica\Core; -use Friendica\App; -use Friendica\BaseObject; -use Friendica\Core\Session\CacheSessionHandler; -use Friendica\Core\Session\DatabaseSessionHandler; use Friendica\Database\DBA; +use Friendica\DI; use Friendica\Model\Contact; -use Friendica\Model\User; 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() - { - 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(); - } else { - $SessionHandler = new DatabaseSessionHandler(); - } - - session_set_save_handler($SessionHandler); - } - } - public static function exists($name) { - return isset($_SESSION[$name]); + return DI::session()->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 DI::session()->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; + DI::session()->set($name, $value); } - /** - * Sets multiple session variables. - * Overrides values for existing keys. - * - * @param array $values - */ public static function setMultiple(array $values) { - $_SESSION = $values + $_SESSION; + DI::session()->setMultiple($values); } - /** - * Removes a session variable. - * Ignores missing keys. - * - * @param $name - */ public static function remove($name) { - unset($_SESSION[$name]); + DI::session()->remove($name); } - /** - * Clears the current session array - */ public static function clear() { - session_unset(); - session_start(); - $_SESSION = []; + DI::session()->clear(); } /** - * Returns contact ID for given user ID + * Return the user contact ID of a visitor for the given user ID they are visiting * * @param integer $uid User ID - * @return integer Contact ID of visitor for given user ID + * @return integer */ public static function getRemoteContactID($uid) { - if (empty($_SESSION['remote'][$uid])) { - return false; + $session = DI::session(); + + if (!empty($session->get('remote')[$uid])) { + $remote = $session->get('remote')[$uid]; + } else { + $remote = 0; } - return $_SESSION['remote'][$uid]; + $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 $remote; } /** @@ -132,11 +97,13 @@ class Session */ public static function getUserIDForVisitorContactID($cid) { - if (empty($_SESSION['remote'])) { + $session = DI::session(); + + if (empty($session->get('remote'))) { return false; } - return array_search($cid, $_SESSION['remote']); + return array_search($cid, $session->get('remote')); } /** @@ -146,15 +113,17 @@ class Session */ public static function setVisitorsContacts() { - $_SESSION['remote'] = []; + $session = DI::session(); - $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'])) { + if (($contact['uid'] == 0) || Contact\User::isBlocked($contact['id'], $contact['uid'])) { continue; } - $_SESSION['remote'][$contact['uid']] = $contact['id']; + $session->set('remote', [$contact['uid'] => $contact['id']]); } DBA::close($remote_contacts); } @@ -166,23 +135,8 @@ class Session */ public static function isAuthenticated() { - if (empty($_SESSION['authenticated'])) { - return false; - } + $session = DI::session(); - return $_SESSION['authenticated']; - } - - /** - * @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); } }