私が開発しているウェブサイト用の簡単なパスワード回復機能を書いていますが、有効期限について疑問に思っていました。
要点を言えば、送信するパスワードのリセットリンクに約48時間の有効期限を追加したいと思います。現在の時刻を保存するために新しい列を作成し、しばらくしてからそれがまだ有効かどうかを確認する必要がありますか、それとももっと簡単な方法がありますか?
これが私のコードです。
public function forgotPass($email) {
$bd = new Bd();
$conn = $bd->connect();
$stt = $conn->prepare("SELECT * FROM Users where email=?");
$stt-> bind_param("s",$email);
$stt-> execute();
$result = $stt->get_result();
if (mysqli_num_rows($result) == 1) {
$stt = $conn->prepare("INSERT INTO Users(recovery) VALUES(?)");
$recovery = $this->randHash(8);
if (!$recovery)
return false;
$stt-> bind_param("s",$recovery);
$stt-> execute();
}
}
これが私のrandHash
コードです:
private static function randHash($lenght) {
if (!filter_var($lenght, FILTER_VALIDATE_INT)) {
return false;
}
$allowed = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
$max = strlen($allowed) - 1;
for ($i=1;$i<=$lenght;$i++) {
$hash .= $allowed[mt_rand(0, $max)];
}
return $hash;
}