ฉันคิดวิธีแก้ปัญหาชั่วคราวสำหรับปัญหาที่ไม่ธรรมดา แต่ก็ยังห่างไกลจากปัญหาที่ไม่เคยเกิดขึ้นมาก่อนกับการโต้ตอบของโซลูชันแคช WP ที่เป็นที่นิยมกับคุกกี้ในกรณีนี้คือคุกกี้ความคิดเห็น WP มาตรฐาน โซลูชันของฉันมีข้อยกเว้น "ผู้ใช้ที่รู้จักกันดี" ที่ไม่ค่อยได้รับการกล่าวถึงอย่างชัดเจนในการให้บริการไฟล์แคช ไม่ว่าจะใช้งานได้หรือไม่ฉันคิดว่าอธิบายและเรียนรู้ว่าทำไมมันเป็นความคิดที่ไม่ดีอาจให้คำแนะนำโดยทั่วไป
ฉันได้ทดสอบวิธีการของฉันด้วย WP Super Cache, W3 Total Cache และ Comet Cache สิ่งที่ฉันแยกแยะให้ละเอียดในตัวเองในขณะที่ศึกษาปัญหานี้คือ WP Super Cache ("WPSC" ต่อจากนี้) ดังนั้นฉันจะใช้มันเป็นตัวอย่างหลักของฉัน
พื้นหลัง
เมื่อเธรดความคิดเห็นมาตรฐาน WP ถูกตั้งค่าเพื่ออนุญาตให้ผู้เยี่ยมชมแสดงความคิดเห็นคุกกี้ความคิดเห็นจะถูกตั้งค่าสำหรับผู้แสดงความคิดเห็นที่ไม่ใช่ผู้ใช้ที่ลงทะเบียนและเข้าสู่ระบบด้วยสิทธิ์การแสดงความคิดเห็นจริงภายใต้การตรวจสอบเพิ่มเติม ในสิ่งที่ฉันเชื่อว่าเป็นการกำหนดค่าที่พบบ่อยที่สุดผู้วิจารณ์จำเป็นต้องระบุชื่อและที่อยู่อีเมลเท่านั้น เหล่านี้จะถูกเก็บไว้ภายในสองคุกกี้เบราว์เซอร์มักจะและcomment_author_ . COOKIEHASH
ถูกกำหนดตามตัวเลือกผู้ใช้comment_author_email_ . COOKIEHASH
COOKIEHASH
หากตั้งค่าให้ส่งไฟล์ที่สร้างขึ้นใหม่ให้กับ "ผู้ใช้ที่รู้จัก" WPSC จะกำหนดว่าจะให้บริการไฟล์แคชหรือไม่บนพื้นฐานของการตรวจสอบหลายครั้ง: ผู้ใช้ที่ลงชื่อเข้าใช้จะได้รับไฟล์ใหม่และผู้เยี่ยมชม ส่วนหลังจะถูกระบุอย่างชัดเจนจากการมีอยู่ของเบราว์เซอร์comment_author_
คุกกี้ซึ่งไม่ได้ระบุหรือไม่ซ้ำกันสำหรับผู้ใช้โดยเฉพาะCOOKIEHASH
(โดยปกติ แต่ไม่เสมอไป "MDP" ที่เข้ารหัสรุ่น MD5 ที่เข้ารหัสในตัวเลือกไซต์)
สิ่งที่ดูเหมือนจะเป็นส่วนสำคัญของรหัส WPSC จาก wp-cache-phase1.php LL371-383 ใช้รูปแบบ RegEx เพื่อรับสายโดยปั่นผ่านคุกกี้:
$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: '/' } );
สำหรับผู้ที่ไม่คุ้นเคยกับ jQuery Cookie: ด้านบนตั้งค่าคุกกี้เซสชันอย่างง่ายด้วย key = comment_author_proxyhash
and value = proxy_author
, เหมาะสำหรับทั้งไซต์ (นอกจากนี้สำหรับผู้ที่ใช้ jQuery Cookie และ WP นอกเหนือจากการแทนที่ jQuery ที่คุ้นเคย$
สำหรับ WP jQuery
เราได้ตั้งค่าไว้แล้ว$.cookie.raw = true;
)
ฉันเพิ่มบรรทัดลงในสคริปต์ jQuery ของฉันและvoila! , WPSC, W3 Total Cache และ Comet Cache ทำหน้าที่เหมือนที่ฉันต้องการ หลังจากที่ฉันใช้สคริปต์และโหลดฉันได้รับหน้าใหม่ ถ้าฉันแสดงความคิดเห็นจริง ๆจะมีการตั้งค่าปกติcomment_author_
และcomment_author_email_
คุกกี้และดูเหมือนว่าจะไม่มีปัญหาใด ๆ กับการอยู่ร่วมกัน
อาจมีข้อบกพร่องอย่างหนึ่งคือคุกกี้ "proxyhash" จะเดินทางไปกับผู้ใช้ตราบใดที่เขาหรือเธอยังคงเปิดเซสชัน แต่นั่นไม่ได้ทำให้ฉันเป็นปัญหาใหญ่ - หรือคุ้มค่ากับการเตือน ฉันไม่เคยได้ยินใครบางคนบ่นเกี่ยวกับเรื่องแบบนี้กับคุกกี้ปกติ
แต่อาจมีบางสิ่งที่ฉันพลาดไปและกำลังจะค้นพบความทุกข์ยากมากมายของฉัน หรืออาจจะมีวิธีปฏิบัติที่ดีที่สุดที่ค่อนข้างง่ายสำหรับฉันในการทำซ้ำCOOKIEHASH
ใน jQuery ครอบคลุมทั้งกรณีการใช้งานทางเลือก ... หรือเพื่อให้ได้ผลสุดท้ายแบบเดียวกันด้วยวิธีการอื่น - วิธีอื่น ๆ ในการหลอกปลั๊กอินแคชเพื่อดูแลผู้เข้าชม ในฐานะผู้แสดงความคิดเห็น ...
หากไม่มีมีเหตุผลที่ดีที่จะไม่ผลักดันสิ่งนี้หรือสิ่งที่อยู่ใกล้กับเอกภพในปลั๊กอินหรือไม่?
wp_localize_script
เพื่อส่งต่อแฮชคุกกี้ไปยัง Javascript ของคุณเพื่อให้คุณสามารถใช้คุกกี้ "เนทีฟ" แทนการใช้พรอกซี มิฉะนั้นนี่เป็นปัญหาที่น่าสนใจมากและวิธีการแก้ปัญหาของคุณดูดีแม้ว่าคุกกี้ + แคชจะซับซ้อนอยู่เสมอดังนั้นจึงยากที่จะบอกได้ว่าเป็นโซลูชันที่ "ถูกต้อง" หรือมีบางอย่างที่พลาดไป การวิจัยที่ยอดเยี่ยม!