1. Приветствуем Вас на неофициальном форуме технической поддержки XenForo на русском языке. XenForo - коммерческий форумный движок от бывших создателей vBulletin, написанный на PHP.

Logout средствами классов и функций Xenforo

Тема в разделе "Основные вопросы по XenForo", создана пользователем DenisZZ, 18.06.2017.

Загрузка
  1. DenisZZ

    DenisZZ Местный

    Регистрация:
    16.07.15
    Сообщения:
    4
    Симпатии:
    0
    Версия XF:
    1.4.8
    Здравствуйте!
    Подскажите кто знает как сделать logout средствами классов и функций Xenforo.
    Пробовал с помощью функции delete() класса XenForo_Session в файле Session.php, - не получается.

    Подцепляю классы Xenforo... стандартно:
    define('XF_ROOT', 'forum');
    define('TIMENOW', time());
    define('SESSION_BYPASS', false); // if true: logged in user info and sessions are not needed
    require_once(XF_ROOT . '/library/XenForo/Autoloader.php');
    XenForo_Autoloader::getInstance()->setupAutoloader(XF_ROOT . '/library');
    XenForo_Application::initialize(XF_ROOT . '/library', XF_ROOT);
    XenForo_Application::set('page_start_time', TIMENOW);
    $dependencies = new XenForo_Dependencies_Public();
    $dependencies->preLoadData();
    XenForo_Session::startPublicSession();

    Дальше пробовал много всего, - ничего не получается, опыта с Xenforo мало, да ещё и ООП недавно только осваиваю.
    Подскажите пожалуйста!
     
  2. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Вообще лучше такой вариант использовать:
    PHP:
    $dir __DIR__;
    $_SERVER['DOCUMENT_ROOT'] = $dir;
    require(
    $dir '/library/XenForo/Autoloader.php');
    set_time_limit(0);

    XenForo_Autoloader::getInstance()
        ->
    setupAutoloader($dir '/library');

    $startTime microtime(true);
    XenForo_Application::initialize($dir '/library'$dir '/');
    XenForo_Application::set('page_start_time'$startTime);
    //XenForo_Application::disablePhpErrorHandler();

    $dependencies = new XenForo_Dependencies_Public();
    $dependencies->preLoadData();
    А дальше начинается интересное. Дело в том, что все действия описаны в контроллерах: library/ControllerPublic - для публичных и library/ControllerAdmin - для админки. Как я понимаю, Вам нужен следующий контроллер: library/ControllerPublic/Logout.php. Ну и там в действии по умолчанию actionIndex возьмите нужный Вам код.
     
    DenisZZ нравится это.
  3. DenisZZ

    DenisZZ Местный

    Регистрация:
    16.07.15
    Сообщения:
    4
    Симпатии:
    0
    Версия XF:
    1.4.8
    Большое спасибо! Получилось. Конечно, надо ещё разбираться с этой темой, поскольку сессии это не так просто, надо смотреть как удаляет, в каком объёме и т.д. Но это дорабатывается... А так, работает... Спасибо!
    код:
    PHP:
    ---- подключение классов ----
    ---
    $dr_class XenForo_Application::resolveDynamicClass('XenForo_Session');
            
    $dr_logout = new $dr_class();
            
    $dr_logout->delete();
    XenForo_Model::create('XenForo_Model_Session')->processLastActivityUpdateForLogOut(XenForo_Visitor::getUserId());
                
    XenForo_Application::get('session')->delete();
                
    XenForo_Helper_Cookie::deleteAllCookies(
                    array(
    'session'),
                    array(
    'user' => array('httpOnly' => false))
                );
                
    XenForo_Visitor::setup(0);
    Ещё раз... Это работает, но пока не могу сказать, корректно ли...
     
  4. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    @DenisZZ, а это не лишнее?
    PHP:
    $dr_class XenForo_Application::resolveDynamicClass('XenForo_Session');
    $dr_logout = new $dr_class();
    $dr_logout->delete();
     
    DenisZZ нравится это.
  5. DenisZZ

    DenisZZ Местный

    Регистрация:
    16.07.15
    Сообщения:
    4
    Симпатии:
    0
    Версия XF:
    1.4.8
    Да, это лишнее.
     

Поделиться этой страницей