Це рішення для кешів та файлів cookie, щоб зіткнутися зі мною?


23

Я придумав попереднє рішення для не зовсім поширеної, але далеко небаченої проблеми взаємодії популярних WP-кеш-рішень із файлами cookie, в цьому випадку стандартними файлами cookie-коментарів WP. Моє рішення також стосується рідко чітко визначених "відомих користувачів" винятків із обслуговування кешованих файлів. Будь-то це корисно чи ні, я вважаю, що пояснення цього та, можливо, навчання, чому це погана ідея, може бути загалом повчальним.

Я перевірив свій метод з кешуванням WP Super Cache, W3 Total Cache та Comet Cache. Та, яку я детально розбив для себе під час вивчення цієї проблеми, був WP Super Cache (далі "WPSC"), тому я буду використовувати його як основний приклад.

Передумови

Якщо стандартний потік коментарів WP встановлений для того, щоб відвідувачі могли коментувати, cookie-коментарі встановлюються для будь-якого коментатора, який не є зареєстрованим користувачем та увійшов у систему, з фактичними правами коментування, які піддаються подальшій перевірці. В моїй думці, це найпоширеніша конфігурація, коментатору потрібно вказати лише ім’я та адресу електронної пошти. Зазвичай вони зберігаються в межах двох файлів cookie браузера comment_author_ . COOKIEHASHта comment_author_email_ . COOKIEHASH. COOKIEHASHвизначається відповідно до параметрів користувача.

Якщо встановлено для доставки щойно створених файлів "відомим користувачам", WPSC визначає, чи потрібно подавати кешований файл на основі декількох перевірок: Користувачі, які ввійшли в систему, отримують свіжі файли, а також відвідувачі, які "можуть коментувати". Останні визначаються головним чином наявністю у своїх браузерах comment_author_файлів cookie, які конкретно або однозначно не ідентифікуються для конкретного користувача COOKIEHASH(зазвичай, але не завжди кодована MD5 версія «siteurl», записана в параметрах сайту).

Очевидно, що це ключова частина коду WPSC від wp-cache-phase1.php LL371-383, використовує шаблон RegEx для отримання рядка, переходячи через cookie:

$regex = "/^wp-postpass|^comment_author_";
if ( defined( 'LOGGED_IN_COOKIE' ) )
    $regex .= "|^" . preg_quote( constant( 'LOGGED_IN_COOKIE' ) );
else
    $regex .= "|^wordpress_logged_in_";
$regex .= "/";
while ($key = key($_COOKIE)) {
    if ( preg_match( $regex, $key ) ) {
        wp_cache_debug( "wp_cache_get_cookies_values: $regex Cookie detected: $key", 5 );
        $string .= $_COOKIE[ $key ] . ",";
    }
    next($_COOKIE);
}

Тепер, якщо я працював строго в PHP, я міг би повторно виробляти або підключатись до основних функцій WP і отримувати звичайний comment_author_ . COOKIEHASHнабір шаблону коментарів, але я працюю в jQuery за допомогою плагіна jQuery Cookie. Однак, як ви бачите, якщо ви подивитесь на RegEx, функція WPSC не хвилює COOKIEHASH: Це задоволено, якщо вона стикається comment_author_.

МОЕ ТЕНТАТИВНЕ РІШЕННЯ

$.cookie( 'comment_author_proxyhash', 'proxy_author', { path: '/' } );

Для тих, хто не знає файлу cookie jQuery: вищенаведене встановлює простий cookie сеансу з ключем = comment_author_proxyhashта value = proxy_author, добре для всього сайту. (Також для тих, хто використовує файли cookie jQuery та WP, крім попередньої заміни звичного jQuery $на WP jQuery, я вже встановив $.cookie.raw = true;.)

Я додав рядок до свого сценарію jQuery і, voila! , WPSC, W3 Total Cache та Comet Cache діють так, як я хочу. Після використання сценарію та перезавантаження я отримую нові сторінки. Якщо я випадково розміщую справжній коментар, встановлюються нормальні comment_author_та comment_author_email_файли cookie, і, схоже, не виникає проблем із співіснуванням.

Можливо, одним із дефектів буде те, що cookie "proxyhash" буде подорожувати з користувачем до тих пір, поки він або вона буде тримати сеанс відкритим, але це не вражає мене, як ймовірно, головної проблеми - або навіть варто застерегти. Я, звичайно, ніколи не чув, щоб хтось скаржився на таке, що відбувається з одним із звичайних файлів cookie.

Але, можливо, є щось, чого мені не вистачає, і я збираюсь відкрити багато свого нещастя, якщо, можливо, і моє зведення. А може, для мене є відносно простий спосіб найкращої реплікації COOKIEHASHв jQuery, який також охоплює випадки альтернативного використання ... або досягти такого ж кінцевого ефекту іншими способами - іншими способами введення плагінів кешування для лікування відвідувача як коментатор ...

Якщо ні, чи є якась вагома причина НЕ виштовхувати це чи щось наближене до Всесвіту в плагіні?


3
Реквізит для добре вивченого та задокументованого питання. Однак я думаю, що природа питання може відкрити це для більшої дискусії, а не остаточної відповіді (поза темою: в першу чергу заснована на думці). FWIW, на мою думку, я не бачу тут нічого поганого - зрештою, ви просто встановлюєте єдиний, загальний файл cookie без особистих даних.
TheDeadMedic

Дякую за вклад. Буду вдячний за таку дискусію, і я б відзначив гарною відповіддю будь-яку, що: а) вказав на проблему з цим методом "загального печива"; б) надав альтернативні засоби для досягнення того ж ефекту, або в) надав корисні розуміння основних технічних питань, що стосуються "відомих користувачів".
CK MacLeod

Зауважимо, ви можете wp_localize_scriptпередати хеш-файли cookie у свій Javascript, щоб ви могли використовувати "нативне" cookie замість proxyhash. В іншому випадку це дуже цікаве питання, і ваше рішення здається надійним, хоча файли cookie + кеш завжди такі складні, що важко сказати, чи це "правильне" рішення, чи щось пропущено. Прекрасне дослідження!
phatskat

Цікаве запитання - я не можу придумати нічого з цього приводу, що могло б зашкодити вам, але чи можу я запитати, чому ви хочете таким чином обійти кеш? Надання користувачам подібних можливостей перемагає мета створення кешу на повній сторінці. Крім того, додатковий файл cookie додає розмір запиту (хоча і мінімально), коли такий же результат може бути досягнутий із загальними конфігураціями кешу, просто додавши до URL-адреси будь-які параметри запитів, наприклад, mysite.com?a. Тільки мої $ 0,02 ...
ssnepent

ssnepenthe: Можливо, я повинен був пояснити: Плагін, який я розробляв, коли писав питання - wordpress.org/plugins/commenter-ignore-button - використовує jQuery, щоб дозволити відвідувачам ставити вибраних коментаторів "на ігнорування". Початкова дія застосовує форматування CSS до потоку коментарів, а потім покладається на файл cookie для зберігання позначення та його присутності для дублювання ефекту (через PHP) протягом наступного оновлення до закінчення терміну cookie. У кешованій версії сторінки ефект не буде зареєстрований. Так, так, це форма навмисного локалізованого кешування-кешування.
CK MacLeod

Відповіді:


1

Ваше рішення із файлом cookie comment_author_proxyhash, звичайно, технічно спрацює - усі кешовані плагіни, які я знаю, не аналізують хеш-значення і просто припинять доставку кешованого вмісту на основі представлення файлів cookie comment_author_ *.

Проблема тут полягає в тому, що функція кешування сторінок - це те, що веб-сайтам дійсно потрібно, і часто кешування сторінок налаштовано саме тому, що гола продуктивність WordPress недостатня і здатна навіть в найвищий час вийти з ладу сервер. Це залежить від характеру вмісту веб-сайту, але власники сайтів іноді просто не в змозі платити за апаратне забезпечення, необхідне для обробки всього за допомогою PHP / WP-коду. Іншими словами, якомога більше трафіку потрібно обслуговувати з кешу сторінок, коли це можливо. З практики я можу сказати, що нам часто доводиться ідентифікувати та відключати плагіни, роблячи винятки з кешу.

Звичайно, це не завжди можливо, але намагайтеся працювати з кешованою сторінкою, коли це можливо. Наприклад, ви можете приховати divтеги з коментарями, які ви хочете ігнорувати через javascript, або блоком цілих коментарів ajax-ify.

У будь-якому випадку вам не потрібно позначати відвідувача як коментатора, але припиняйте кешування через ваші власні логічні причини. Тому краще використовувати унікальний файл cookie та зробити його сигналом виключення з кешу. W3 Total Cache має для цього варіант "Відхилити файли cookie", але не інші плагіни зі списку, тому вам знадобиться хак, як той, який ви запропонували.


Спасибі! Ви порушуєте ряд дійсних питань, але я скажу, що те, що цей код робить, по суті, стосується будь-якого відвідувача, який бере участь у нитках коментарів, достатньо, щоб когось "ігнорувати" або "відключити" як "відомого користувача / коментатор ". Якщо сайт не може обробити таку участь, він, ймовірно, не може також обробляти стандартний шаблон коментарів WordPress (та спільноту для коментування)!
CK MacLeod

Подумайте, що ви тут, хоча, звичайно, не можете точно знати, як ваші користувачі цим користуються. Btw багато веб-сайтів із високим трафіком завантажують обробку своїх коментарів на окремі запити чи навіть сторонні послуги саме для того, щоб пізніше відобразити вміст статті швидко та ледаче завантажувати динамічний вміст коментарів. Прийміть це як офтопічну ідею, можливо, для подальших версій вашого плагіна :)
WowPress.host
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.