»

自定义WordPress评论者个人信息cookies过期时间

    WordPress网站建设网络安全  
建站访客WordPress插件CDN的问题IIS浏览器工作web.configwordpress缓存网站镜像网络安全插件客户申请状态防盗链网站优化访问又拍云CDNwindows主机FAQ爬虫CDNcookiesApache

前一篇文章我讲了 《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 文件中的完整代码:

  1. / **
  2.  * Sets the cookies used to store an unauthenticated commentator's identity. Typically used
  3.  * to recall previous comments by this commentator that are still held in moderation.
  4.  *
  5.  * @param WP_Comment $comment Comment object.
  6.  * @param object     $user    Comment author's object.
  7.  * @since 3.4.0
  8.  * /
  9. function wp_set_comment_cookies($comment$user) {  
  10. if ( $user->exists() )  
  11. return;  
  12. / **
  13.      * Filters the lifetime of the comment cookie in seconds.
  14.      *
  15.      * @since 2.8.0
  16.      * @param int $seconds Comment cookie lifetime. Default 30000000.
  17.  * /
  18. $comment_cookie_lifetime = apply_filters( 'comment_cookie_lifetime', 30000000 ); // 默认为 30000000 秒
  19. $secure = ( 'https' === parse_url( home_url(), PHP_URL_SCHEME ) );  
  20.     setcookie( 'comment_author_' . COOKIEHASH, $comment->comment_author, time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN, $secure );  
  21.     setcookie( 'comment_author_email_' . COOKIEHASH, $comment->comment_author_email, time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN, $secure );  
  22.     setcookie( 'comment_author_url_' . COOKIEHASH, esc_url($comment->comment_author_url), time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN, $secure );  
  23. }  

 

如果我们想自己定义评论者(commentators) 的cookies 信息过期时间,可以通过下面代码实现:

  1. // 自定义评论者 cookie 的过期时间为1小时  
  2. add_filter('comment_cookie_lifetime', 'expired_comment_cookie');   
  3. function expired_comment_cookie($lifetime) {   
  4.     return 3600;   
  5. }  

 

遇到的问题

但是,如果你允许系统的默认过期时间存在,或者你如上所述自定义了过期时间,在使用静态缓存插件的时候可能会出现一些问题。例如,当你使用其他浏览器(与登录浏览器不同)在页面评论后,会在 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)。时光在路上保留所有权利

  1. // 无评论 cookies  
  2. function no_comment_cookies() {  
  3.     return -1;  
  4. }  
  5. add_filter('comment_cookie_lifetime', 'no_comment_cookies');  

这时候你再评论的时候会发现 HTTP Header 的 cookies 里面没有了上述cookies信息。

 

代码分享链接: pan.baidu.com/share/init?surl=bpy8OpT 密码: x8q3

时光在路上扫码阅读、分享
  • 版权声明:该文章由 时光在路上 发表,共 2677字。除非特别标注来源,否则为原创。详见《版权声明》部分。
  • 转载请注明:文章标题和文章链接 - 时光在路上 - 也可直接“复制本文链接” 或 使用右边二维码分享本文 →