将令牌作为GET变量传递

时间:2016-02-09 16:57:26

标签: php

我有一个用于获取和检查令牌的令牌类和方法。

如果我在链接中吐出新的令牌:

<td><a href="users.php?delete=<?=$user['id'].'&token='.Token::generate();?>

这是课堂上的功能:

  public static function generate(){
    return $_SESSION['token'] = base64_encode(openssl_random_pseudo_bytes(32));
  }

如果只是在该表的下方,我回显出$ _SESSION ['token']它会在链接中显示一个完全不同的令牌。我很困惑。

编辑:这是页面的整个部分,显示了初始令牌创建和回显:

<td><a href="users.php?delete=<?=$user['id'].'&token='.Token::generate();?>" class="btn btn-sm btn-default<?=(($user['id'] == $user_data['id'])?' disabled':'');?>" data-toggle="tooltip" title="delete user"><span class="glyphicon glyphicon-remove"</a></td>
            <td><?=$user['full_name'];?></td>
            <td><?=$user['email'];?></td>
            <td><?=clean_date($user['join_date']);?></td>
            <td><?php
                    if (new DateTime($user['last_login']) < new DateTime("2015-05-15 16:00:00")) {
                        echo 'Never';
                    } else {
                        echo clean_date($user['last_login']);
                    };?></td>
            <td><?=$user['permissions'];?></td>
        </tr>
    <?php endwhile ;?>
    </tbody>
</table>
<?=$_SESSION['token'];?>

here's a screenshot showing the two values are completely different

2 个答案:

答案 0 :(得分:1)

我将假设您尝试创建一次生成单例,即生成一次的值,然后以相同的方式重新评估。

试试这个:

class Token
{
    public static function generate(){
        static $token;

        if (null === $token) {
            $_SESSION['token'] = $token = unpack('H*', openssl_random_pseudo_bytes(32))[1];
        }

        return $token;
    }
}

答案 1 :(得分:0)

似乎我只需要替换生成的令牌中的所有+符号:

.map(Function.call, String.prototype.trim)

编辑:这更好:

$token = str_replace('+','p',$token);