Вопрос или проблема
Если у меня есть файл example.php, который загружает WordPress и проверяет, вошел ли пользователь на мой сайт WordPress:
// Загружаем WP
require_once(dirname(__FILE__) . '/wp-load.php' );
// Проверяем, вошел ли пользователь, и выводим тестовое сообщение
if (is_user_logged_in()) {
echo 'Пользователь вошел в систему';
} else {
echo 'Пользователь не вошел в систему';
}
Как я могу запустить этот файл с другого веб-сайта, который находится на другом сервере, к моему сайту WordPress? Я хочу проверить, вошел ли текущий пользователь, просматривающий веб-сайт A, на мой сайт WordPress на веб-сайте B.
Это можно сделать с помощью ajax-запроса с jsonp, но есть ли вариант, не требующий JS?
Это не сработает с cURL, потому что я не думаю, что можно проверить, вошел ли пользователь, используя cURL.
Документация PHP утверждает, что include()
и require()
могут иметь внешние URL, если allow_url_include
установлено в 1 в php.ini
, но я читал, что у этого есть проблемы с безопасностью.
Буду благодарен за любую помощь.
Я думаю, лучший способ для вас — это поделиться и проверить куки на вход в систему WordPress.
Проверьте wordpress_logged_in_[hash]
с вашего удаленного сервера
Ответ или решение
Чтобы проверить, авторизован ли пользователь на вашем сайте WordPress, находящемся на другом сервере, нужно учитывать несколько аспектов и рисков. К сожалению, прямые методы, такие как использование cURL
или включение файлов с другого сервера, могут не подойти из-за ограничений безопасности.
Подход с использованием куки
Лучшим решением будет проверка авторизационных куки, которые WordPress создает для каждого пользователя. Один из ключевых куки, который хранит состояние входа пользователя, называется wordpress_logged_in_[hash]
. Его можно использовать для проверки, авторизован ли пользователь на вашем сайте WordPress.
1. Проверка куки
Вот основные шаги, которые следует выполнить:
Шаг 1: Сначала убедитесь, что оба сайта (A и B) поддерживают одну и ту же доменную политику. Это может быть достигнуто, если сайт A и сайт B находятся под одним верхним доменом. Например, siteA.example.com
и siteB.example.com
.
Шаг 2: Используйте setcookie()
на сайте A. Когда пользователь заходит на сайт A, передавайте информацию о том, что у него есть доступ к сайту B. Для этого необходимо создать специальный маршрут на сайте WordPress, который проверяет, авторизован ли пользователь.
Шаг 3: Удаленный вызов к сайту B. Сайт A должен отправить запрос к сайту B с куки.
// Пример запроса к сайту B с куки:
$cookie_name = 'wordpress_logged_in_' . md5('yoursecretkey');
// Получаем значение куки
$cookie_value = $_COOKIE[$cookie_name];
// Теперь отправляем запрос на сайт B на проверку авторизации
$response = file_get_contents('https://siteB.example.com/example.php?' . http_build_query(['cookie' => $cookie_value]));
echo $response; // выведет 'User is logged in' или 'User is not logged in'
2. Реакция на запрос на сайте B
На сайте B создайте маршрут/файл, который будет принимать куки и проверять, авторизован ли пользователь. Это примитивный пример:
// example.php на сайте B
require_once(dirname(__FILE__) . '/wp-load.php');
if (isset($_GET['cookie'])) {
// Проверьте куку на сервере
if (isset($_COOKIE['wordpress_logged_in_' . md5('yoursecretkey')])) {
echo 'User is logged in';
} else {
echo 'User is not logged in';
}
} else {
echo 'No cookie received';
}
Вопросы безопасности
- Безопасность куки: Убедитесь, что куки не являются уязвимыми для перехвата. Используйте HTTPS для защиты передаваемых данных.
- Проверка подлинности: Рассмотрите возможность создания токена или nonce для дополнительной проверки подлинности запросов, чтобы убедиться, что они исходят от вашего сайта.
- Ограничение прямых доступов: Настройте свой сервер так, чтобы он обрабатывал только определенные запросы к авторизационному файлу, чтобы снизить риск атаки.
Заключение
Вывод о том, авторизован ли пользователь на сайте WordPress, с учетом вышеописанных методов, возможен без использования JavaScript и cURL, однако потребует организовать обмен куками между вашими сайтами. Обязательно учитывайте аспекты безопасности, когда работаете с куками и авторизацией, чтобы защитить свои данные и ресурсы.