启用对象缓存时,用户在注册后无法进行身份验证

时间:2013-02-08 作者:Tonny Jørgensen

我刚刚升级到WordPress 3.5.1和新的object-cache.php 版本2.0.2,用户可以切换到一些新的博客缓存功能。

以前版本的object cache存在这个问题,但我在注册和激活博客时删除了用户密钥,从而解决了这个问题。这会从memcache中清除缓存的密码,因为某些原因,这是错误的。

我尝试重新实现此功能,但它不起作用。我已将此代码放入我的注册页:

wp_cache_key_delete("4e76434eea3c9d9cf9cb10bbf3f4a74b92:users:1"); 
wp_cache_delete(\'users\');
哈希是我的主要食盐

在激活页面上,我再次使用这个

wp_cache_key_delete("4e76434eea3c9d9cf9cb10bbf3f4a74b92:users:".$user_id);
wp_cache_delete(\'users\');
这应该清除缓存的用户及其密码,以便根据MySQL数据库中的密码进行身份验证。

我将这两个函数添加到object-cache.php 要处理他们的密钥删除

#tonny的黑客攻击

function wp_cache_key_delete($key) {
    global $wp_object_cache;

      return $wp_object_cache->key_delete($key);
}
还有这个

    function key_delete($key) {

            $mc =& $this->get_mc($group);

            $result = $mc->delete($key);

            @ ++$this->stats[\'delete\'];
            $this->group_ops[$group][] = "delete $id";

            if ( false !== $result )
                    unset($this->cache[$key]);

            return $result;
    }
你们有没有遇到过类似的问题,用户在注册博客时无法登录?

1 个回复
最合适的回答,由SO网友:Tonny Jørgensen 整理而成

现已解决此问题激活脚本中的解决方案如下:

$blog_real_id = $wpdb->get_var("select blog_id from wp_bp_user_blogs where user_id = ".$user_id." limit 1");

wp_cache_key_delete("1:users:".$user_id);
wp_cache_key_delete($blog_real_id.":users:".$user_id);
这将清除博客id 1和已注册博客ud的缓存用户信息。出于某种原因,memcache中的密码哈希是错误的。在登录之前清除它将在memcache中验证aginst mysql insterad的缓存密码。

结束