Wordpress搞砸了PHP会话和表单验证令牌不匹配


Wordpress screwing up PHP Session and form validation token not matching

由于某些原因,当它生成令牌时,它会在会话中存储另一个令牌,并且它是一个完全随机的令牌。

下面是Token类的代码-

class Token {
protected static $token;
public static function generate() {
    if(!self::$token){
    self::$token = md5(uniqid());
    }
    return Session::put(Config::get('session/token_name'), self::$token);
}

public static function check($token) {
    $tokenName = Config::get('session/token_name');
    if(Session::exists($tokenName) && $token === Session::get($tokenName)) {
        Session::delete($tokenName);
        return true;
    }
    return false;
}
} 

这是我的代码从我的会话类-

class Session {
public static function exists($name) {
    return (isset($_SESSION[$name])) ? true : false;
}
public static function get($name) {
    return $_SESSION[$name];
}
public static function put($name, $value) {
    return $_SESSION[$name] = $value;
}
public static function delete($name) {
    if(self::exists($name)) {
        unset($_SESSION[$name]);
    }
}
public static function flash($name, $string = null) {
    if(self::exists($name)) {
        $session = self::get($name);
        self::delete($name);
        return $session;
    } else if ($string) {
        self::put($name, $string);
    }
}
}

Config::get('session/token_name')只返回'token'

我没有在其他地方生成一个新的令牌,因为它只会返回一个令牌,因为静态变量。

为什么WordPress要这样做?

请帮忙我已经试着让这个工作超过10个小时了!

对于生成函数-

public static function generate() {
    if(!Session::get(Config::get('session/token_name'))){
    return Session::put(Config::get('session/token_name'), md5(mt_rand())); 
    }
    else{
    return Session::put(Config::get('session/token_name'), Session::get(Config::get('session/token_name')));
    }
}