캐시와 쿠키에 대한이 솔루션이 문제가됩니까? 로그인 한 사용자는 새로운 파일을

나는 일반적이지 않지만 임시 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(일반적으로 사이트 옵션에 기록 된 “siteurl”의 MD5 인코딩 버전은 아닙니다).

wp-cache-phase1.php LL371-383에서 WPSC 코드의 핵심 부분은 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 Cookie 플러그인을 사용하여 jQuery에서 작업하고 있습니다. 당신이 정규식 보면 당신이 볼 수 그러나 WPSC 기능은 걱정하지 않습니다 COOKIEHASH: 그것은 발생하면 그것은 만족 있어요 comment_author_.

내 임시 솔루션

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

jQuery 쿠키에 익숙하지 않은 사용자의 경우 위의 내용은 키 = comment_author_proxyhash및 값 = 으로 간단한 세션 쿠키를 설정 proxy_author하여 전체 사이트에 적합합니다. (또한, 사전에 대체 친숙한 jQuery를 추가, jQuery를 쿠키 및 WP를 사용하는 사람들을 위해 $WP를 들어 jQuery, 나는 이미 설정했습니다 $.cookie.raw = true;.)

나는 jQuery 스크립트에 줄을 추가했다 . , WPSC, W3 Total Cache 및 Comet Cache는 모두 내가 원하는 것처럼 작동합니다. 스크립트를 사용하고 새로 고침하면 새로운 페이지가 나타납니다. 실제 의견을 제시하면 일반 쿠키 comment_author_comment_author_email_쿠키가 설정되며 공존에 아무런 문제가없는 것 같습니다.

아마도 하나의 결함은 “proxyhash”쿠키가 사용자가 세션을 열어 두는 한 사용자와 함께 여행 할 것이지만, 이것이 중대한 문제 나 경고의 가치가있는 것처럼 생각 나지 않을 것입니다. 나는 일반 쿠키 중 하나에서 발생하는 그런 일에 대해 불평하는 사람을 확실히 들어 본 적이 없습니다.

하지만 어쩌면 내가 잃어버린 무언가가있을 수 있으며, 잠재적으로 내 교화에도 불구하고 나의 비애를 많이 발견하려고합니다. 또는 COOKIEHASHjQuery에서 복제하여 대체 사용 사례를 다루는 상대적으로 간단한 모범 사례가 있거나 다른 방법으로 동일한 최종 효과를 얻을 수 있습니다. 캐싱 플러그인을 방문자를 처리하도록 속이는 다른 방법 해설자로서 …

그렇지 않다면, 플러그인에서이 또는 그와 비슷한 것을 우주로 밀지 말아야 할 충분한 이유가 있습니까?



답변

comment_author_proxyhash 쿠키가있는 솔루션은 물론 기술적으로 작동합니다. 내가 아는 모든 캐싱 플러그인은 해시 값을 분석하지 않으며 comment_author_ * 쿠키 존재 여부에 따라 캐시 된 콘텐츠의 배달을 중지합니다.

여기서 문제는 페이지 캐싱 기능이 웹 사이트에 실제로 필요한 것으로, 종종 페이지 캐싱이 정확한 WordPress 성능이 충분하지 않고 피크 타임에 서버를 충돌시킬 수 있기 때문에 정확하게 구성된다는 것입니다. 웹 사이트 콘텐츠 특성에 따라 다르지만 사이트 소유자는 PHP / WP 코드를 통해 모든 것을 처리하는 데 필요한 하드웨어 비용을 지불하지 못하는 경우가 있습니다. 즉, 가능한 한 많은 양의 트래픽이 페이지 캐시에서 제공되어야합니다. 실제로 캐시 예외를 수행하는 플러그인을 식별하고 비활성화해야한다고 말할 수 있습니다.

물론 항상 가능한 것은 아니지만 가능할 때마다 캐시 된 페이지로 작업하십시오. 예를 들어 div, 자바 스크립트를 통해 무시하려는 주석이있는 태그를 숨기 거나 전체 주석 블록을 Ajax-ify 할 수 있습니다.

어쨌든 방문자를 주석 자로 표시 할 필요는 없지만 사용자 지정 논리 이유로 인해 캐싱을 중지하십시오. 따라서 고유 한 쿠키를 사용하고 캐시 예외 신호로 만드는 것이 좋습니다. W3 Total Cache에는 “쿠키 거부”옵션이 있지만 목록의 다른 플러그인은 없으므로 제안한 것과 같은 해킹이 필요합니다.