Saya telah datang dengan solusi sementara untuk tidak persis umum, tetapi jauh dari masalah yang belum pernah terjadi sebelumnya dengan interaksi solusi caching WP populer dengan cookie, dalam hal ini cookie komentar WP standar. Solusi saya juga mendukung pengecualian "pengguna terkenal" yang jarang didefinisikan untuk melayani file dalam cache. Apakah itu dapat digunakan atau tidak, saya pikir itu menjelaskan dan mungkin belajar mengapa itu ide yang buruk mungkin secara umum bersifat instruktif.
Saya telah menguji metode saya dengan WP Super Cache, W3 Total Cache, dan Comet Cache. Salah satu yang saya uraikan sendiri secara detail saat mempelajari masalah ini adalah WP Super Cache ("WPSC" selanjutnya), jadi saya akan menggunakannya sebagai contoh utama saya.
LATAR BELAKANG
Ketika utas komentar standar WP diatur untuk memungkinkan pengunjung berkomentar, kuki komentar ditetapkan untuk setiap komentator yang bukan pengguna terdaftar dan login, dengan hak istimewa komentar aktual akan dikenakan pemeriksaan lebih lanjut. Dalam apa yang saya percaya adalah konfigurasi yang paling umum, seorang komentator hanya perlu memberikan nama dan alamat email. Ini disimpan dalam dua cookie browser, biasanya comment_author_ . COOKIEHASH
, dan comment_author_email_ . COOKIEHASH
. COOKIEHASH
didefinisikan sesuai dengan opsi pengguna.
Jika diatur untuk mengirimkan file yang baru dibuat ke "pengguna yang dikenal," WPSC menentukan apakah akan menyajikan file yang di-cache berdasarkan beberapa pemeriksaan: Pengguna yang masuk mendapatkan file baru, dan begitu juga pengunjung "yang dapat berkomentar." Yang terakhir ini terutama diidentifikasi oleh kehadiran di browser comment_author_
cookie mereka yang tidak secara spesifik atau unik diidentifikasi untuk pengguna tertentu oleh COOKIEHASH
(biasanya tetapi tidak selalu versi MD5-encoded dari "siteurl" yang direkam dalam opsi situs).
Apa yang tampaknya menjadi bagian penting dari kode WPSC, dari wp-cache-phase1.php LL371-383, menggunakan pola RegEx untuk mendapatkan string, bersepeda melalui 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);
}
Sekarang, jika saya bekerja secara ketat di PHP, saya bisa memproduksi ulang atau menghubungkan ke fungsi-fungsi inti WP, dan mendapatkan comment_author_ . COOKIEHASH
set normal dengan templat komentar, tapi saya bekerja di jQuery menggunakan plug-in jQuery Cookie. Namun, seperti yang Anda lihat jika Anda melihat RegEx, fungsi WPSC tidak peduli tentang COOKIEHASH
: Itu puas jika bertemu comment_author_
.
SOLUSI TENTATIF SAYA
$.cookie( 'comment_author_proxyhash', 'proxy_author', { path: '/' } );
Bagi mereka yang tidak terbiasa dengan jQuery Cookie: Di atas menetapkan cookie sesi sederhana dengan key = comment_author_proxyhash
dan value = proxy_author
, bagus untuk seluruh situs. (Juga, bagi mereka yang menggunakan jQuery Cookie dan WP, selain menggantikan jQuery yang sudah dikenal $
untuk WP jQuery
, saya juga sudah siap $.cookie.raw = true;
.)
Saya menambahkan baris ke skrip jQuery saya, dan, voila! , WPSC, W3 Total Cache, dan Comet Cache semuanya bertindak seperti yang saya inginkan. Setelah saya menggunakan skrip, dan memuat ulang, saya mendapatkan halaman baru. Jika saya menempatkan komentar nyata, cookie normal comment_author_
dan comment_author_email_
diatur, dan tampaknya tidak ada masalah dengan keberadaan bersama.
Mungkin satu cacat adalah bahwa cookie "proxyhash" akan melakukan perjalanan dengan pengguna selama dia menjaga sesi terbuka, tetapi itu tidak membuat saya merasa sebagai masalah besar - atau bahkan layak peringatan. Saya tentu saja tidak pernah mendengar seseorang mengeluh tentang hal seperti itu terjadi pada salah satu cookie biasa.
Tapi mungkin ada sesuatu yang saya lewatkan, dan akan menemukan banyak kesengsaraan saya, jika berpotensi untuk membangun saya juga. Atau mungkin ada cara praktik terbaik yang relatif sederhana bagi saya untuk mereplikasi COOKIEHASH
di jQuery, juga mencakup kasus penggunaan alternatif ... atau untuk mencapai efek akhir yang sama dengan cara lain - cara lain untuk mengelabui plug-in caching untuk merawat pengunjung. sebagai komentator ...
Jika tidak, adakah alasan bagus untuk TIDAK mendorong ini atau sesuatu yang dekat dengannya ke alam semesta melalui plug-in?
wp_localize_script
untuk mengirimkan hash cookie ke Javascript Anda sehingga Anda dapat menggunakan cookie "asli" alih-alih proxyhash. Jika tidak, ini adalah masalah yang sangat menarik dan solusi Anda tampaknya solid, meskipun cookie + cache selalu sangat rumit sehingga sulit untuk mengatakan apakah itu solusi yang "tepat" atau jika ada sesuatu yang terlewatkan. Penelitian hebat!