我正在创建一个登录/注册脚本,用户可以使用令牌激活他的帐户。现在我有一个调用随机字符串的函数。
class.functions.php
public static function generateRandomString($length = 200) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
这将输出如下内容:jTq7tH4dKy66dmnhRev5EjbZDZygN1...
现在我的问题是,如何在24小时后将此字符串设置为空,以便用户必须再次激活其帐户。
我的想法是关于我的数据库中的update query
,如下所示:
$statusN = "N" and $statusY = "Y"
数据库中的表字段:
`user_status` ENUM('Y','N') NOT NULL DEFAULT 'N',
sql statment:
$sql = "UPDATE formular SET user_status='" . $statusY . "' WHERE user_status='" . $statusN . "'";
但我不知道怎么用时间handel它
这是插入userdata和activation_token
register.php
$activationToken = functions::generateRandomString();
$stmt = $conn->prepare("INSERT INTO formular (firstname, second_firstname, lastname, zipcode, city, street, additionaladdress, country_id_from_apps_countries, username, email, hash, dday, dmonth, dyear, religion, housenumber, activation_token) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
$stmt->bind_param("sssisssssssssssss", $firstname, $secondFirstname, $lastname, $zipcode, $city, $street, $additionaladdress, $country, $username, $email, $hash, $DOB, $MOB, $YOB, $religion, $houseNumber, $activationToken);
$stmt->execute();
if ($stmt->affected_rows) {
}
答案 0 :(得分:1)
检查时间戳并创建字符串是两回事。
一方面,您必须创建字符串并使用实际时间戳保存它。
第二步,可能使用cronJob,您必须检查数据库中的令牌已过期(超过24小时)并将它们设置为空。
您在两个不同的代码段中有两个不同的操作。
要禁用所有过期的条目,只需从....执行SELECT *,其中token&gt; = XXX。 Foreach结果,UPDATE表设置标记= NULL其中....
等等。