前一篇文章我讲了 《WordPress纯静态化后,cookie记住评论者信息的评论框不能隐藏问题》,该文章涉及到使用JavaScript代码自己编写的关于 cookies 设定代码。
其实,WordPress 系统也有自己对评论者的评论 cookies 默认过期时间定义。即使你使用js代码重新另起炉灶设定了一套cookies,但是WordPress 系统自己的那套评论者的cookies信息还是保留着,只是由于你的js设定,不显示出来而已,查看 HTTP header,里面仍可看到。
关于WordPress自带的评论者Cookies
WordPress系统 文件 wp-includes/comment.php
第 529 行, 有 $comment_cookie_lifetime = apply_filters( 'comment_cookie_lifetime', 30000000 );
这样一段代码,用于记录评论者的用户名、邮箱、网址的 Cookie,Cookie 的有效期默认为 30000000 秒(将近1年)。下面为 comment.php 文件中的完整代码:
- / **
- * Sets the cookies used to store an unauthenticated commentator's identity. Typically used
- * to recall previous comments by this commentator that are still held in moderation.
- *
- * @param WP_Comment $comment Comment object.
- * @param object $user Comment author's object.
- * @since 3.4.0
- * /
- function wp_set_comment_cookies($comment, $user) {
- if ( $user->exists() )
- return;
- / **
- * Filters the lifetime of the comment cookie in seconds.
- *
- * @since 2.8.0
- * @param int $seconds Comment cookie lifetime. Default 30000000.
- * /
- $comment_cookie_lifetime = apply_filters( 'comment_cookie_lifetime', 30000000 ); // 默认为 30000000 秒
- $secure = ( 'https' === parse_url( home_url(), PHP_URL_SCHEME ) );
- setcookie( 'comment_author_' . COOKIEHASH, $comment->comment_author, time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN, $secure );
- setcookie( 'comment_author_email_' . COOKIEHASH, $comment->comment_author_email, time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN, $secure );
- setcookie( 'comment_author_url_' . COOKIEHASH, esc_url($comment->comment_author_url), time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN, $secure );
- }
如果我们想自己定义评论者(commentators) 的cookies 信息过期时间,可以通过下面代码实现:
- // 自定义评论者 cookie 的过期时间为1小时
- add_filter('comment_cookie_lifetime', 'expired_comment_cookie');
- function expired_comment_cookie($lifetime) {
- return 3600;
- }
遇到的问题
但是,如果你允许系统的默认过期时间存在,或者你如上所述自定义了过期时间,在使用静态缓存插件的时候可能会出现一些问题。例如,当你使用其他浏览器(与登录浏览器不同)在页面评论后,会在 HTTP Header 的 cookies 里记录评论者 Cookies(这个是WordPress自带的,和上篇文章中提到的通过js代码自定义的不是同一个)。
本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利
WordPress 为评论者设置了三个 cookie:
- comment_author_{HASH}
- comment_author_email_{HASH}
- comment_author_url_{HASH}
你会发现评论后这三个都和你自定义的那些Value数值一样,而只是Name不太一样,因为WordPress的加入了其他部分,如HASH加密散列的数据。
此时,如果你要删除静态缓存插件生成的html缓存文件,后台删除之后刷新,然后用这个浏览器刷新前端页面,可能会发现静态缓存插件并不工作,没生成静态html文件,原因就是上述三个cookie的存在:大部分用户在自己WordPress 后台设置了“不为已登录用户启用缓存”。评论者属于“已登录用户”。更有甚者,这些cookies 信息可能会传给一些 CDN 服务器会,造成不能生成缓存的麻烦、而且暴露评论用户的信息。所以,启用静态缓存插件、并使用CDN时候,切记让上述cookie失效。可以做如下设置:
本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利
- // 无评论 cookies
- function no_comment_cookies() {
- return -1;
- }
- add_filter('comment_cookie_lifetime', 'no_comment_cookies');
这时候你再评论的时候会发现 HTTP Header 的 cookies 里面没有了上述cookies信息。
代码分享链接: pan.baidu.com/share/init?surl=bpy8OpT 密码: x8q3