我正在使用以下内容来获取可用于重置密码的随机代码,但我总是得到相同的值 $encrypt
兰特和timestamp
应该每次都不同吗?
$randnumb = rand(1000000000000,999999999999);
$timestamp = time();
$encrypt = md5($row['userid']+$timestamp+$randnumb);
使用.
连接运算符而不是+
运算符
rand
是一个伪随机数生成器,它只是一个来自某个初始值的函数,称为seed
。为了得到不同的序列,你必须用 http://php.net/manual/en/function.srand.php:srand(time())
设置不同的种子是最简单的方法。
但!切勿将rand
和md5
用于任何加密任务,例如哈希!这是完全不安全的。
从 PHP 5.5 开始,您必须使用 http://php.net/manual/en/function.password-hash.php 对于旧版本,请使用 https://github.com/ircmaxell/password_compat 。
你需要看看 rand() 的语法
其兰特($min,$max)
所以第一个参数是最小值,第二个参数是最大值。
您需要再添加一个 9 才能生成随机数。
$randnumb = rand(1000000000000,9999999999999
你给rand
的范围不好:第二个参数是第一个减 1。它将始终返回相同的数字。因此,在第二个参数中添加"9"位数字。
如果您的 userid 不是数字,则添加将不受该用户 ID 的影响,而只会受到其他两个元素的影响。也许你打算做一个串联,在这种情况下,你应该使用点(.
)运算符。但是,如果用户 id 是数字,它应该可以工作。
您正在使用+
运算符进行连接。使用.
运算符进行 PHP 连接。
'+'
用于JavaScript。