Member 11589429 Ответов: 1

Как сделать ссылку неактивной через 24 часа и не должна работать по второму клику


Я использую asp.net веб-приложение. Я отправляю письмо пользователю, в котором передаю ссылку. Нажав на эту ссылку, я внесу изменения в свою базу данных. Я использую следующий код:

Он отлично работает для отправки электронной почты со ссылкой. Я хочу, чтобы эта ссылка была неактивна через 24 часа и нажата только один раз. Если нажать дважды, то ничего не получится. Как это сделать?

using (MailMessage mm = new MailMessage("sender@gmail.com", txtEmail.Text))
{
    mm.Subject = "Account Activation";
    string body = "Hello " + txtUsername.Text.Trim() + ",";
    body += "<br /><br />Please click the following link to activate your account";
    body += "<br /><a href = '" + Request.Url.AbsoluteUri.Replace("CS.aspx", "CS_Activation.aspx?ActivationCode=" + activationCode) + "'>Click here to activate your account.</a>";
    body += "<br /><br />Thanks";
    mm.Body = body;
    mm.IsBodyHtml = true;
    SmtpClient smtp = new SmtpClient();
    smtp.Host = "smtp.gmail.com";
    smtp.EnableSsl = true;
    NetworkCredential NetworkCred = new NetworkCredential("sender@gmail.com", "<password>");
    smtp.UseDefaultCredentials = true;
    smtp.Credentials = NetworkCred;
    smtp.Port = 587;
    smtp.Send(mm);
}


Что я уже пробовал:

using (MailMessage mm = new MailMessage("sender@gmail.com", txtEmail.Text))
{
    mm.Subject = "Account Activation";
    string body = "Hello " + txtUsername.Text.Trim() + ",";
    body += "<br /><br />Please click the following link to activate your account";
    body += "<br /><a href = '" + Request.Url.AbsoluteUri.Replace("CS.aspx", "CS_Activation.aspx?ActivationCode=" + activationCode) + "'>Click here to activate your account.</a>";
    body += "<br /><br />Thanks";
    mm.Body = body;
    mm.IsBodyHtml = true;
    SmtpClient smtp = new SmtpClient();
    smtp.Host = "smtp.gmail.com";
    smtp.EnableSsl = true;
    NetworkCredential NetworkCred = new NetworkCredential("sender@gmail.com", "<password>");
    smtp.UseDefaultCredentials = true;
    smtp.Credentials = NetworkCred;
    smtp.Port = 587;
    smtp.Send(mm);
}

F-ES Sitecore

Обновите свою базу данных, чтобы иметь поле "Email_Sent" для пользователя, и когда вы отправляете электронное письмо, обновите дату Email_Sent пользователя, чтобы показать это. Прежде чем вы попытаетесь отправить электронное письмо, проверьте значение Email_Sent, чтобы узнать, прошло ли менее 24 часов с момента отправки письма, и если да, то ничего не делайте.

1 Ответов

Рейтинг:
1

OriginalGriff

Храните код активации в БД вместе с временем истечения срока действия и реквизитами, необходимыми для активации учетной записи.
Когда они перейдут по ссылке, возьмите код активации из строки запроса и найдите его в своей базе данных.
1) если его там нет, то он был использован.
2) если он там есть, проверьте срок годности.
2.1) если он все еще действителен, активируйте учетную запись и удалите строку таблицы активации.
2.2) если он недействителен, удалите строку, удалите учетную запись и покажите на странице сообщение "истек срок действия".


Laxmidhar tatwa technologies

В БД хранится дата с флагом с false
При нажатии кнопки проверить дату и сделать флаг ur равным true