Вопрос или проблема
Я пробовал множество способов предотвратить использование кнопки «Назад» в браузере, чтобы никто не мог вернуться в профиль посетителя, который вышел из системы. Код, который я использовал, должен был предотвратить кэширование данных с последней посещенной страницы после выхода. Они не работают. WordPress выводит посетителя из системы, как только они нажимают кнопку выхода, да, эта часть работает. К сожалению, вы можете увидеть последнюю посещенную страницу человеком, который был в системе. Сессия уничтожена, но кэш все еще хранит информацию о последней посещенной странице. Если вы нажмете любую ссылку на странице профиля, вы будете возвращены на страницу входа. Вы не должны были покидать эту страницу входа, не войдя в систему. Какой код можно использовать, чтобы заставить браузер удалить данные из кэша, чтобы никто не мог просматривать информацию из вышедшего профиля? JavaScript может представлять собой риск безопасности. Да, я знаю, что вы не можете удалить историю браузера, но должен быть безопасный код для этого. WordPress поставляется с файлом, который уничтожает сессию, но я не могу найти этот файл в коде twenty sixteen. Кроме того, этот код не работает:
if(!isset($_SESSION['logged_in'])) :
header("Location: login.php");
unset($_SESSION['logged_in']);
session_destroy();
Не могли бы вы, пожалуйста, помочь!!!
Вам следует использовать встроенную функцию WordPress is_user_logged_in()
, а также несколько других функций WordPress:
if ( !is_user_logged_in() ) {
wp_redirect( get_bloginfo( 'url' ) . '/index.php' );
exit;
}
wp_redirect()
обрабатывает перенаправление для вас. Пожалуйста, имейте в виду, что он не завершает выполнение автоматически, поэтому вам следует вызвать его после этого.
Я также встроил функцию WordPress для получения вашего URL – возможно, это не обязательно в вашем случае, так как вы просто перенаправляете на главную страницу.
Убедитесь, что эта функция вызывается до того, как будет отправлен любой вывод.
Не уверен, поможет ли это кому-то.
Но я смог перенаправить свой URL после выхода из системы в параметрах URL.
https://example.com/wp-login.php?action=logout&redirect_to=https://example.com/persona/
Ответ или решение
Вопрос, который вы задали, касается безопасности и управления кэшированием при выходе пользователя из системы на платформе WordPress, в частности, используя тему Twenty Sixteen. Давайте разберёмся, как можно сделать так, чтобы пользователи не имели доступа к предыдущим страницам после выхода из системы.
Основные шаги для решения проблемы:
-
Использование функций WordPress:
Для начала, вам нужно использовать встроенные функции WordPress, такие какis_user_logged_in()
, чтобы убедиться, что пользователь авторизован. В противном случае вы должны перенаправить его на страницу входа:if ( !is_user_logged_in() ) { wp_redirect( home_url() ); exit; }
Эта функция проверяет, есть ли у пользователя активная сессия. Если нет, он будет перенаправлен на главную страницу или любую другую страницу, которую вы укажете.
-
Очистка кэша:
Чтобы предотвратить кэширование страниц браузером, вы можете установить заголовки, которые указывают браузерам не кэшировать контент. Добавьте следующий код в файлfunctions.php
вашей темы:function disable_cache() { if ( !is_user_logged_in() ) { header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP 1.1. header("Pragma: no-cache"); // HTTP 1.0. header("Expires: 0"); // Proxies. } } add_action('template_redirect', 'disable_cache');
Этот код обеспечивает правильные заголовки для предотвращения кэширования страниц для незарегистрированных пользователей.
-
Перенаправление после выхода:
Если вы хотите, чтобы пользователь перенаправлялся на определённую страницу после выхода из системы, вы можете использовать параметры URL. Например, используя ссылку выхода с редиректом:<a href="<?php echo wp_logout_url( home_url() ); ?>">Выйти</a>
Эта ссылка автоматически перенаправит пользователя на главную страницу после выхода.
-
Логика на странице профиля:
В вашем коде должен быть предусмотрен контроль доступа к странице профиля. Например, перед отображением страницы, проверяйте, авторизован ли пользователь:add_action('template_redirect', 'check_user_access'); function check_user_access() { if ( is_page('profile') && !is_user_logged_in() ) { wp_redirect( wp_login_url() ); exit; } }
Таким образом, если неавторизованный пользователь попытается получить доступ к странице профиля, он будет перенаправлен на страницу входа.
Заключение:
Следуя указанным шагам, вы сможете предотвратить доступ к кэшированным страницам после выхода пользователя из системы и улучшить безопасность своего сайта на WordPress. Это также позволит вам лучше контролировать пользовательский опыт на вашем сайте. Не забывайте, что эти изменения необходимо добавлять до вывода любого содержимого на страницу, чтобы они работали корректно.
Если у вас возникнут дополнительные вопросы или потребуется более детальная помощь, не стесняйтесь обращаться!