Tôi đã đưa ra một giải pháp tạm thời cho một vấn đề không chính xác phổ biến, nhưng khác xa với vấn đề chưa từng có với sự tương tác của các giải pháp bộ nhớ đệm WP phổ biến với cookie, trong trường hợp này là cookie nhận xét WP tiêu chuẩn. Giải pháp của tôi cũng dựa trên ngoại lệ "người dùng đã biết" hiếm khi được xác định rõ ràng để phục vụ các tệp được lưu trong bộ nhớ cache. Cho dù nó có thể sử dụng được hay không, tôi cho rằng việc giải thích nó và có thể tìm hiểu lý do tại sao đó là một ý tưởng tồi có thể mang tính hướng dẫn.
Tôi đã thử nghiệm phương pháp của mình với WP Super Cache, W3 Total Cache và Comet Cache. Người mà tôi đã tự mình phân tích chi tiết khi nghiên cứu vấn đề này là WP Super Cache ("WPSC" sau đây), vì vậy tôi sẽ sử dụng nó làm ví dụ chính của mình.
LÝ LỊCH
Khi một luồng nhận xét tiêu chuẩn WP được đặt để cho phép khách truy cập nhận xét, cookie nhận xét được đặt cho bất kỳ người bình luận nào không phải là người dùng đã đăng ký và đăng nhập, với các đặc quyền nhận xét thực tế phải chịu kiểm tra thêm. Trong những gì tôi tin là cấu hình phổ biến nhất, một người bình luận chỉ cần cung cấp tên và địa chỉ email. Chúng được lưu trữ trong hai cookie trình duyệt, thường comment_author_ . COOKIEHASH
và comment_author_email_ . COOKIEHASH
. COOKIEHASH
được xác định theo tùy chọn người dùng.
Nếu được đặt để phân phối các tệp mới được tạo cho "người dùng đã biết", WPSC sẽ xác định xem có phục vụ tệp được lưu trong bộ nhớ cache hay không dựa trên một số kiểm tra: Người dùng đã đăng nhập nhận tệp mới và khách truy cập "có thể nhận xét". Cái sau được xác định chủ yếu bởi sự hiện diện trong trình duyệt comment_author_
cookie của chúng không được xác định cụ thể hoặc duy nhất cho người dùng cụ thể bởi COOKIEHASH
(thường nhưng không phải luôn luôn là phiên bản được mã hóa MD5 của "siteurl" được ghi trong tùy chọn trang web).
Cái dường như là phần chính của mã WPSC, từ wp-cache-phase1.php LL371-383, sử dụng mẫu RegEx để lấy chuỗi, đạp xe qua 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);
}
Bây giờ, nếu tôi đang làm việc nghiêm túc với PHP, tôi có thể tái sản xuất hoặc nối vào các chức năng cốt lõi của WP và lấy mẫu bình thường comment_author_ . COOKIEHASH
theo mẫu nhận xét, nhưng tôi đang làm việc trong jQuery bằng trình cắm jQuery Cookie. Tuy nhiên, như bạn có thể thấy nếu bạn xem RegEx, chức năng WPSC không quan tâm đến COOKIEHASH
: Thật hài lòng nếu nó gặp phải comment_author_
.
GIẢI PHÁP TENTENT CỦA TÔI
$.cookie( 'comment_author_proxyhash', 'proxy_author', { path: '/' } );
Đối với những người không quen thuộc với Cookie jQuery: Phần trên đặt cookie phiên đơn giản với key = comment_author_proxyhash
và value = proxy_author
, tốt cho toàn bộ trang web. (Ngoài ra, đối với những người sử dụng jQuery Cookie và WP, ngoài việc thay thế trước jQuery quen thuộc $
cho WP jQuery
, tôi cũng đã thiết lập $.cookie.raw = true;
.)
Tôi đã thêm dòng vào tập lệnh jQuery của mình và, thì đấy! , WPSC, W3 Total Cache và Comet Cache đều hoạt động như tôi muốn. Sau khi tôi sử dụng tập lệnh và tải lại, tôi nhận được các trang mới. Nếu tôi tình cờ đặt một bình luận thực sự, bình thường comment_author_
và comment_author_email_
cookie được đặt và dường như không có vấn đề gì với sự tồn tại.
Có lẽ một khuyết điểm là cookie "proxyhash" sẽ di chuyển với người dùng miễn là họ giữ phiên mở, nhưng điều đó không gây ra cho tôi khả năng là một vấn đề lớn - hoặc thậm chí đáng để cảnh báo. Tôi chắc chắn chưa bao giờ nghe ai đó phàn nàn về điều đó xảy ra với một trong những cookie thông thường.
Nhưng có lẽ có điều gì đó tôi đang thiếu, và sắp phát hiện ra nhiều điều cho sự đau khổ của tôi, nếu có khả năng cũng phù hợp với tôi. Hoặc có thể có một cách thực hành tốt nhất tương đối đơn giản để tôi sao chép COOKIEHASH
trong jQuery, cũng bao gồm các trường hợp sử dụng thay thế ... hoặc để đạt được hiệu quả cuối cùng bằng các cách khác - các cách khác để lừa các trình cắm thêm bộ đệm vào xử lý khách truy cập như một bình luận viên ...
Nếu không, có lý do chính đáng nào KHÔNG để đẩy thứ này hoặc thứ gì đó gần với nó ra vũ trụ trong một trình cắm thêm không?
wp_localize_script
để chuyển băm cookie cho Javascript của mình để bạn có thể sử dụng cookie "gốc" thay vì proxyhash. Mặt khác, đây là một vấn đề rất thú vị và giải pháp của bạn có vẻ chắc chắn, mặc dù cookie + bộ đệm luôn phức tạp đến mức khó có thể nói đó là giải pháp "đúng" hay nếu có gì đó bị bỏ sót. Nghiên cứu tuyệt vời!