Вопрос или проблема
Могу ли я поделиться сеансом пользователя или cookie между двумя совершенно разными веб-сайтами? У меня есть два веб-сайта www.xxx.com и www.yyy.com (разные установки WordPress). В то время как пользователь авторизован, нажатие на ссылку на странице веб-сайта 1 может перенаправить его на страницу с деталями поста веб-сайта 2. Таким образом, пользователь должен оставить комментарий как авторизованный пользователь.
Это возможно на совершенно разных размещенных веб-сайтах? (Наиболее предпочтительно)
(или)
Должен ли я внести какие-либо изменения, такие как многоуровневая установка или установка поддомена?
Пожалуйста, предложите свои идеи по этому функционалу.
Короткий ответ: нет возможности делиться информацией о cookie/сессии между разными доменами (это также включает поддомены).
Долгий ответ: в вашей особой ситуации возможно создать такую конструкцию между двумя установками WordPress, но это потребует некоторых модификаций и может создать определенные проблемы с безопасностью. Поскольку это довольно сложная задача и нет доступных плагинов или учебных пособий, к которым я мог бы дать ссылку, я просто запишу, как бы я подошел к этой задаче сам.
Вам в основном нужно выполнить две части, чтобы это заработало:
– найти способ синхронизировать базы данных пользователей или получить доступ к базе данных пользователей другой установки (вы можете сделать это так, как предложил Симон).
– для каждого авторизованного пользователя добавить параметр к URL-адресам на вашей странице, которые ведут ко второй установке, чтобы включить информацию о том, какой пользователь должен быть авторизован, получить этот параметр во второй установке и авторизовать пользователя.
Чтобы добавить немного безопасности ко всему этому, вам не следует просто создавать ссылку, такую как http://www.yyy.com/?uid=4, так как любой, кто знает этот URL, сможет легко войти в вашу установку WordPress без пароля. Я бы начал с создания ‘session-id’ и хранения его вместе с значением таймаута, которое обновляется при каждой загрузке страницы в user_meta общей/синхронизированной базе данных пользователей, а затем хэшировать это с помощью userid + password + ip + фиксированного SALT-ключа, который используется обеими установками. Таким образом, вы получите более безопасную версию URL, такую как http://www.yyy.com/?uid=d41d8cd98f00b204e9800998ecf8427e.
Это все еще не 100% безопасный метод (так как нет возможности достичь этого в этой конфигурации), но пока вашим пользователям разрешено только оставлять комментарии (и авторизация через этот удаленный метод отключена для администраторов!), я бы лично сказал, что риски приемлемы, и, я полагаю, это можно реализовать в 50-100 строк кода в WordPress.
Ответ или решение
Совместный доступ к пользователям между двумя сайтами WordPress
Вопрос о том, возможно ли разделение пользовательских сессий или куки между двумя разными веб-сайтами, является актуальным для многих владельцев сайтов, стремящихся улучшить пользовательский опыт. Конкретно в вашем случае, когда у вас есть два сайта — www.xxx.com и www.yyy.com — с отдельными установками WordPress, вам необходимо выяснить, как обеспечить возможность комментирования, переходя с одного сайта на другой как авторизованный пользователь. Давайте разберемся с этой задачей более детально.
Ответ на вопрос
Краткий ответ заключается в том, что нет возможности делиться куки/информацией сессии между совершенно разными доменами, включая поддомены. Однако есть технические методы, позволяющие создать определенную интеграцию между двумя которыми могут быть полезным для вашего случая.
Возможные пути решения:
-
Синхронизация баз данных пользователей
Один из возможностей — синхронизация баз данных пользователей между двумя установками WordPress. Это можно сделать, например, через общий сервер базы данных или через API. С помощью встроенных функций WordPress вы сможете извлекать информацию о пользователях и их авторизации. -
Создание безопасного механизма авторизации
Для перехода пользователя с одного сайта на другой вам нужно передать информацию о пользователе в URL, которую затем можно использовать для входа на втором сайте. Вместо простого включения ID пользователя в URL, рекомендуется использовать безопасное шифрование.- Генерация токена: Создайте токен сгенерированный на базе ID пользователя, его пароля, IP-адреса и общего SALT ключа, используемого на обоих сайтах. Это поможет обеспечить защиту от потенциальных атак. Например:
$secure_parameter = hash('sha256', $user_id . $user_password . $user_ip . $shared_salt);
Таким образом, вы получите безопасный URL, который будет выглядеть так:
http://www.yyy.com/?auth_token=a1b2c3d4...
- Генерация токена: Создайте токен сгенерированный на базе ID пользователя, его пароля, IP-адреса и общего SALT ключа, используемого на обоих сайтах. Это поможет обеспечить защиту от потенциальных атак. Например:
-
Обработка безопасного входа на втором сайте
На втором сайте (www.yyy.com
) необходимо реализовать логику, которая будет проверять валидность переданного токена. Если токен действующий, выполните вход пользователя, иначе покажите сообщение об ошибке. Этот процесс можно реализовать с помощью кастомного маршрута или через обработчик, добавленный в файлfunctions.php
. -
Улучшение безопасности
Убедитесь, что возможность удаленного входа для административных пользователей отключена. Это поможет снизить риски безопасности. Помните о регулярных обновлениях WordPress и используйте плагины для защиты от взломов. -
Альтернативное решение: Мультиместная установка WordPress
Если указанные выше методы кажутся слишком сложными, рассмотрите возможность использования функционала мультиместной сети WordPress. Это позволяет создать несколько сайтов, управляемых одной установкой WordPress, что упрощает совместный доступ к пользователям и сессиям. Тем не менее, такой подход требует некоторой планировки и может быть не подходит для всех сценариев.
Заключение
Важно понимать, что реализация разделения пользователей между двумя совершенно независимыми сайтами требует тщательной проработки механизма безопасности и может быть сложна в реализации. Если вы хотите обеспечить практическое решение, лучше всего будет использовать мультиместные установки или разработать безопасный механизм для передачи данных идентификации пользователя. Такой подход позволит обеспечить плавное взаимодействие между вашими сайтами, повышая при этом безопасность.
Если у вас возникли дополнительные вопросы или требуется помощь в реализации данного решения, мы рекомендуем обратиться за консультацией к профессионалам в области веб-разработки и информационной безопасности.