Popüler WP önbelleğe alma çözümlerinin çerezlerle etkileşimi ile ilgili benzeri olmayan bir sorun için geçici bir çözüm buldum, bu durumda standart WP yorum çerezleri. Benim çözümüm ayrıca, önbelleğe alınmış dosyalara sunulan nadiren iyi bilinen "bilinen kullanıcılar" istisnasına da dayanıyor. Kullanılabilir olsun veya olmasın, açıklamanın ve muhtemelen neden kötü bir fikir olduğunu öğrenmenin genellikle öğretici olabileceğini düşünüyorum.
Yöntemimi WP Süper Önbellek, W3 Toplam Önbellek ve Comet Önbellek ile test ettim. Bu sorunu incelerken kendim için detaylı olarak ayrıldığım kişi WP Süper Önbellek (bundan sonra "WPSC") idi, bu yüzden ana örneğim olarak kullanacağım.
ARKA FON
Bir WP standart yorum dizisi, ziyaretçilerin yorum yapmasına izin verecek şekilde ayarlandığında, kayıtlı çerezler olmayan ve giriş yapan herhangi bir yorumcu için yorum çerezleri ayarlanır ve daha sonra kontrollere tabi olan gerçek yorum yapma ayrıcalıkları bulunur. En yaygın yapılandırma olduğuna inanıyorum, bir yorumcunun yalnızca bir ad ve bir e-posta adresi sağlaması gerekiyor. Bunlar, genellikle comment_author_ . COOKIEHASH
ve iki tarayıcı çerezinde saklanır comment_author_email_ . COOKIEHASH
. COOKIEHASH
kullanıcı seçeneklerine göre tanımlanır.
Yeni oluşturulan dosyaları "bilinen kullanıcılara" sunacak şekilde ayarlanmışsa, WPSC önbelleklenmiş bir dosyanın birkaç denetime dayanarak sunulup sunulmayacağını belirler: Giriş yapan kullanıcılar yeni dosyalar alır ve ziyaretçiler "yorum yapabilenler" yapar. Sonuncusu, comment_author_
çerez tarayıcılarında , belirli bir kullanıcı için özel olarak veya benzersiz bir şekilde tanımlanmayan tanımlama bilgilerinin varlığıyla tanımlanır COOKIEHASH
(genellikle, ancak site seçeneklerinde kaydedilmiş olan "siteurl" un her zaman MD5 kodlu bir versiyonu).
WPSC kodunun anahtar parçası olarak görünen, wp-cache-phase1.php LL371-383'ten bir dizge almak için çerezler arasında dolaşmak için bir RegEx modeli kullanır:
$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);
}
Şimdi, eğer kesinlikle PHP'de çalışıyor olsaydım, WP çekirdek işlevlerini yeniden üretebilir ya da bağlayabilir comment_author_ . COOKIEHASH
ve yorum şablonuyla normal olarak ayarlayabilirdim, ancak jQuery Cookie eklentisini kullanarak jQuery'de çalışıyorum. Ancak, RegEx'e bakarsanız görebileceğiniz gibi, WPSC işlevi aşağıdakilerle ilgilenmez COOKIEHASH
: Karşılaşırsa memnun olur comment_author_
.
TENTATİF ÇÖZÜM
$.cookie( 'comment_author_proxyhash', 'proxy_author', { path: '/' } );
JQuery Cookie ile aşina olmayanlar için: Yukarıdaki, key = comment_author_proxyhash
ve value = proxy_author
olan tüm siteye uygun basit bir oturum çerezi kurar . (Ayrıca, jQuery Cookie ve WP kullananlar $
için, WP'nin tanıdık jQuery'lerini önceden ikame etmenin yanı sıra jQuery
, ben de hazırladım $.cookie.raw = true;
.)
Satırı jQuery scriptime ekledim ve voila! , WPSC, W3 Toplam Önbellek ve Comet Önbellek istediğim gibi hareket ediyor. Komut dosyasını kullanıp yeniden yükledikten sonra yeni sayfalar alıyorum. Gerçek bir yorum yaparsam, normal comment_author_
ve comment_author_email_
çerezler ayarlanır ve birlikte yaşamaya dair herhangi bir sorun yok gibi görünüyor.
Belki de bir kusur, "proxyhash" çerezinin, oturumu açık tuttuğu sürece, kullanıcıyla birlikte seyahat edeceği, ancak bu beni büyük bir sorun - veya hatta bir uyarıya değecek kadar önemli değil -. Kesinlikle normal çerezlerden biriyle böyle bir şeyden şikayetçi olan birini duymadım.
Ama belki de özlediğim bir şey var ve belki de benim düzenlememe rağmen, sıkıntımla ilgili çok şey keşfetmek üzereyim. Veya belki de COOKIEHASH
jQuery'de kopyalamam için , alternatif kullanım durumlarını da kapsayan ... ya da başka yollarla aynı son etkiyi elde etmem için nispeten basit, en iyi pratik bir yol var ... ya da önbellekleme eklentilerini ziyaretçiyi tedavi etmek için kandırmanın başka yolları yorumcu olarak ...
Eğer değilse, bir eklentide bunu ya da ona yakın bir şeyi evrene itmemek için herhangi bir sebep var mı?
wp_localize_script
, çerez karma'sını Javascript'inize aktarmak için kullanabilirsiniz, böylece proxyhash yerine "yerel" çerezini kullanabilirsiniz. Aksi halde, bu çok ilginç bir konudur ve çözümünüz sağlam gibi görünse de, çerezler + önbellek her zaman çok karmaşık olsa da, "doğru" bir çözüm olup olmadığını veya kaçırılan bir şey olup olmadığını söylemek zor. Harika araştırma!