Программа: (Де)активатор учетной записи на веб-сайте

Не лишним бывает знать, что пользователи, зарегистрировавшиеся на сайте, предоставили корректный адрес электронной почты. Для проверки правильности адреса электронной почты пошлите письмо по адресу, указанному при регистрации. Если пользователь в течение нескольких дней не посетит специальный URL, включенный в письмо, то его учетную запись можно деактивировать.

Система состоит из трех частей. Первая часть, показанная в примере 8.4, представляет собой программу notify-user.php, посылающую электронное письмо новому пользователю с просьбой посетить контрольный URL. Вторая часть, приведенная в примере 8.5, – это страница verifyuser. php, которая обрабатывает контрольный URL и отмечает пользователей, прошедших проверку. Третья часть – это программа delete-user. php, деактивирующая учетные записи пользователей, которые не посетили контрольный URL в течение определенного интервала времени. Эта программа показана в примере 8.6.

Ниже приведен оператор SQL, создающий таблицу для хранения информации о пользователе:

CREATE TABLE users (
email VARCHAR(255) NOT NULL,
created_on DATETIME NOT NULL,
verify_string VARCHAR(16) NOT NULL,
verified TINYINT UNSIGNED
);

Возможно, вы захотите иметь больше информации о пользователях, но для нашей проверки этого вполне достаточно.


При создании учетной записи пользователя занесите информацию в таблицу users и пошлите пользователю письмо по электронной почте, объясняющее, как подтвердить его учетную запись. В программе предполагается, что адрес электронной почты пользователя хранится в переменной $email.

Пример 8.4. notify-user.php
// генерируем контрольную строку
$verify_string = '';
for ($i = 0; $i < 16; $i++) {
$verify_string .= chr(mt_rand(32,126));
}
// помещаем пользователя в базу данных
if (! mysql_query("INSERT INTO users
(email,created_on,verify_string,verified)
VALUES ('".addslashes($email)."',NOW(),
'".addslashes($verify_string)."',0)")) {
error_log("Can't insert user: ".mysql_error());
exit;
}
$verify_string = urlencode($verify_string);
$safe_email = urlencode($email);
$verify_url = "http://www.example.com/verify.php";
$mail_body=<<<_MAIL_
To $email:
Please click on the following link to verify your account creation:
$verify_url?email=$safe_email&verify_string=$verify_string
If you do not verify your account in the next seven days, it will be
deleted.
_MAIL_;
mail($email,"User Verification",$mail_body);

Контрольная страница, на которую пользователи попадают, если нажимают на ссылку, указанную в почтовом сообщении, обновляет таблицу users, если пользователи предоставляют соответствующую информацию, как показано в примере 8.5.

Пример 8.5.


verify-user.php
$safe_email = addslashes($_REQUEST['email']);
$safe_verify_string = addslashes($_REQUEST['verify_string']);
if ($r = mysql_query("UPDATE users SET verified = 1 WHERE email
LIKE '$safe_email' AND
verify_string = '$safe_verify_string' AND verified = 0")) {
if (mysql_affected_rows() == 1) {
print "Thank you, your account is verified.";
} else {
print "Sorry, you could not be verified.";
}
} else {
print "Please try again later due to a database error.";
}

Контрольный статус пользователя обновляется, только если адрес электронной почты и контрольная строка, предоставленные пользователем, соответствуют строке в базе данных, которая еще не проверялась. Вот и последний этап – короткая программа, удаляющая непроверенных пользователей по истечении некоторого интервала времени,
как показано в примере 8.6.

Пример 8.6. delete-user.php
$window = 7; // в днях
if ($r = mysql_query("DELETE FROM users WHERE verified = 0 AND
created_on < DATE_SUB(NOW(),INTERVAL $window DAY)")) {
if ($deleted_users = mysql_affected_rows()) {
print "Deactivated $deleted_users users.\n";
}
} else {
print "Can't delete users: ".mysql_error();
}

Запускайте эту программу раз в день, чтобы очистить таблицу от пользователей, не прошедших проверку.


Если потребуется изменить интервал времени, предоставляемый пользователям для самопроверки, то измените значение $window и обновите текст почтового сообщения, посылаемого пользователю, чтобы отразить новое значение.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Аутентификация, основанная на cookies
Буферизация вывода в броузер
Взаимодействие в рамках Apache
Идентификация различных броузеров
Настройка обработки ошибок

Вернуться в раздел: PHP / 8. Основы Web