X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FCore%2FSession.php;h=0af4d344b11337c019bc27ea3bdba480aa09ab86;hb=f97a358a9b0d73e96c6dd52ea304574d0bbff039;hp=20d1e9ef7b521e6aac48cce6e357a2633078eadb;hpb=29f7ebe307c22b275466390937b82ccb3820fb1c;p=friendica.git diff --git a/src/Core/Session.php b/src/Core/Session.php index 20d1e9ef7b..0af4d344b1 100644 --- a/src/Core/Session.php +++ b/src/Core/Session.php @@ -5,53 +5,116 @@ */ namespace Friendica\Core; -use Friendica\Core\Session\DatabaseSessionHandler; -use Friendica\Core\Session\MemcacheSessionHandler; +use Friendica\Database\DBA; +use Friendica\DI; +use Friendica\Model\Contact; +use Friendica\Util\Strings; /** * High-level Session service class * - * @author Hypolite Petovan + * @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); + } - if (!Config::get('system', 'disable_database_session')) { - $memcache = Cache::memcache(); - if (is_object($memcache)) { - $SessionHandler = new MemcacheSessionHandler($memcache); - } else { - $SessionHandler = new DatabaseSessionHandler(); - } + public static function set($name, $value) + { + DI::session()->set($name, $value); + } + + public static function setMultiple(array $values) + { + DI::session()->setMultiple($values); + } + + public static function remove($name) + { + DI::session()->remove($name); + } + + public static function clear() + { + DI::session()->clear(); + } + + /** + * Returns contact ID for given user ID + * + * @param integer $uid User ID + * @return integer Contact ID of visitor for given user ID + */ + public static function getRemoteContactID($uid) + { + $session = DI::session(); - session_set_save_handler($SessionHandler); + if (empty($session->get('remote')[$uid])) { + return 0; } + + return $session->get('remote')[$uid]; } - public static function exists($name) + /** + * 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) { - return isset($_SESSION[$name]); + $session = DI::session(); + + if (empty($session->get('remote'))) { + return false; + } + + return array_search($cid, $session->get('remote')); } - public static function get($name) + /** + * Set the session variable that contains the contact IDs for the visitor's contact URL + * + * @param string $url Contact URL + */ + public static function setVisitorsContacts() { - return defaults($_SESSION, $name, null); + $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); } - public static function set($name, $value) + /** + * Returns if the current visitor is authenticated + * + * @return boolean "true" when visitor is either a local or remote user + */ + public static function isAuthenticated() { - $_SESSION[$name] = $value; + $session = DI::session(); + + return $session->get('authenticated', false); } }