[Хак] Выйти/войти и остаться на той же странице

1430
где то видел на форуме тему про редирект при логине \ разлогине - как остаться на той же самой странице, если у вас стоит форма входа на всех страницах.
методом тыка сделал и решил описать как - так как тема актуальна.
и так - чтоб при нажатии на кнопку выход вас перебрасывало на ту же страницу в файле
\components\registration\frontend.php
находим
Код PHP:
//======================================================================================================================//

    if ($do=='auth'){

		//====================//
		//==  разлогивание  ==//
        if( $inCore->inRequest('logout') ) {
            $inCore->unsetCookie('userid');

            $user_id = $inUser->id;
            $sess_id = session_id();

            cmsCore::callEvent('USER_LOGOUT', $user_id);

            $inDB->query("UPDATE cms_users SET logdate = NOW() WHERE id = '$user_id'");
            $inDB->query("DELETE FROM cms_online WHERE user_id = '$user_id'");
            $inDB->query("DELETE FROM cms_search WHERE session_id = '".$sess_id."'");

            session_destroy();

            $inUser->dropStatTimer();

            $inCore->redirect('/');
        }

		//====================//

и заменяем на
Код PHP:
    if ($do=='auth'){

		//====================//
		//==  разлогивание  ==//
        if( $inCore->inRequest('logout') ) {
            $inCore->unsetCookie('userid');

            $user_id = $inUser->id;
            $sess_id = session_id();

            cmsCore::callEvent('USER_LOGOUT', $user_id);

            $inDB->query("UPDATE cms_users SET logdate = NOW() WHERE id = '$user_id'");
            $inDB->query("DELETE FROM cms_online WHERE user_id = '$user_id'");
            $inDB->query("DELETE FROM cms_search WHERE session_id = '".$sess_id."'");

            session_destroy();

            $inUser->dropStatTimer();

		$logout_back_url = $logout_back_url ? $logout_back_url : $inCore->getBackURL();
		cmsUser::sessionDel('logout_back_url');
		$inCore->redirect($logout_back_url);
        }

		//====================//


теперь после выхода нас перекидывает обратно на ту страницу, где мы нажали на кнопку выход.

теперь делаем при входе на сайт - при условии что у нас стоит в настройках сайта "ничего не делать после входа"
в файле \core\classes\user.class.php находим
Код PHP:
		// Получаем URL, предыдущий перед формой логина
		$auth_back_url = cmsUser::sessionGet('auth_back_url');
		$auth_back_url = $auth_back_url ? $auth_back_url : $inCore->getBackURL();
		cmsUser::sessionDel('auth_back_url');
и закоментируем всего одну строчку чтоб получилось вот так (или можно удалить её, я закоментировал на всякий случай)
Код PHP:
 
		// Получаем URL, предыдущий перед формой логина
//		$auth_back_url = cmsUser::sessionGet('auth_back_url');
		$auth_back_url = $auth_back_url ? $auth_back_url : $inCore->getBackURL();
		cmsUser::sessionDel('auth_back_url');

вот и всё .

единственный минус - если авторизация происходит со страницы site.ru/login , то пользователя перекидывает опять на эту же страницу с предложением ввести логин и пароль - но пользователь уже авторизирован - как прописать условие так и не смог разобраться.

как будет работать у вас сказать не могу, нужно проверять, но я проверил на двух сайтах и там и там работает.


ну и по традиции моя фраза во всех моих записях
от поощрений не откажусь (инфа на стене и в подписе на форуме), а так же приветствуется плюс в карму
[Хак](new)Альбомы и фотографии пользователей и (old)альбомы клубов в админ-панели | список всех Event-ов системы
Комментарии (2)
mashen&ka 14 августа 2015 в 19:28 0
Хороший хак, но жаль что не доделан до ума!
единственный минус - если авторизация происходит со страницы site.ru/login , то пользователя перекидывает опять на эту же страницу с предложением ввести логин и пароль - но пользователь уже авторизирован
это очень не хороший минус! А вещь очень нужная вообще....
mashen&ka 14 августа 2015 в 19:32 0
И не написана версия....