WordPress: одновременный логин для HTTP и HTTPS
Простое решение для POST на SSL URL
В WordPress, начиная с версии 2.6, встроена поддержка HTTPS: можно сделать либо HTTPS-логин, либо поместить панель администратора за SSL. Однако, из-за особенностей реализации, когда пользователь входит в систему, он получает cookie либо для HTTP, либо для HTTPS. Иными словами, если пользователь попал на http://example.com/wp-admin/, то при переходе на https://example.com/wp-admin/ ему придётся входить в систему еще раз.
Всё бы ничего, но если плагин делает POST на HTTPS, то пользователь попадает на wp-login.php, который после успешного входа сделает перенаправление (GET) на URL, который ожидает принять POST. При этом если POST шёл на https://example.com/wp-admin/admin.php?page=somepage&noheader=1, то пользователь увидит безобразную страницу.
К счастью, есть простое решение. Как известно, аутентификационные cookies устанавливает процедура wp_set_auth_cookie. Перед их установкой она генерирует событие set_auth_cookie, которому передаются следующие параметры:
$auth_cookie— значение для cookie, сгенерированное процедуройwp_generate_auth_cookie();$expire— 0, если пользователь не выбрал "Запомнить меня", не 0 в противном случае;$expiration— срок жизни cookie;$user_id— ID пользователя (из таблицыwp_users);$scheme— схема аутентификации:secure_authдля SSL,authдля HTTP.
Использовать эти данные можно следующим образом:
* set_auth_cookie action hook
*
* @param string $auth_cookie Value generated by wp_generate_auth_cookie()
* @param int $expire 0, if Remember Me is not checked
* @param int $expiration Cookie expiration date
* @param int $user_id ID of the logged in usger
* @param string $scheme Authentication scheme (secure_auth or auth)
*/
function sj_set_auth_cookie($auth_cookie, $expire, $expiration, $user_id, $scheme)
{
static $was_here = false;
if (false === $was_here) {
$was_here = true;
if ('secure_auth' == $scheme) {
wp_set_auth_cookie($user_id, 0 != $expire, false);
}
elseif ('auth' == $scheme) {
wp_set_auth_cookie($user_id, 0 != $expire, true);
}
else {
$was_here = false;
}
}
}
add_action('set_auth_cookie', 'sj_set_auth_cookie', -100, 5);
Янв
2009
Комментарии к статье «WordPress: одновременный логин для HTTP и HTTPS» (2) »
Пожалуйста, не используйте эту форму для комментирования! Данная форма предназначена исключительно для ботов.
Оставить комментарий к записи «WordPress: одновременный логин для HTTP и HTTPS»
गते गते पारगते पारसंगते बोधि स्वाहा
Меня зовут Владимир, я программист-фрилансер, специализирующийся на Web-программировании и програмировании под Linux.
По совместительству занимаюсь администрированием LAMP/LNMP-серверов и техническим переводом.


интересное решение. но для тех, кто не программер. куда этот кусок кода надо вставить чтобы все заработало?
как я понимаю, тогда можно будет админу логиниться и работать по https:// да?
Если я правильно понимаю Ваши намерения, то Вам нужно добавить
define('FORCE_SSL_LOGIN', false);
в
wp-config.php.