Выполнить действие, если кнопка нажата 3 раза

#asp.net

#asp.net

Вопрос:

Я хочу выполнить какое-то действие, если кнопка нажата 3 раза. Точно так же, как если пользователи вводят неправильный пароль для страницы 3 раза, страница должна быть перенаправлена на другую страницу или что-то в этом роде.

Как выполнить действие в ASP.NET C #, если кнопка нажата в 3-й раз?

Ответ №1:

Чтобы проверить, выполнял ли пользователь действие «x» раз, вам нужно как-то его сохранить. Если вы используете базу данных отношений, вы можете, например, вызвать таблицу LoginAttempts и там сохранить все неудачные логины. Когда у вас есть эта таблица, вы можете построить свою логику на ее основе.

Комментарии:

1. Это правда … и он, вероятно, мог бы просто использовать поставщика по умолчанию.

Ответ №2:

Я бы использовал переменную сеанса.

Другим решением может быть наличие столбца в таблице users с именем loginAttempt(int) (по умолчанию 0), как бы я использовал этот столбец

Допустим, у вас есть таблица в вашей базе данных под названием tblUsers с этими столбцами

  1. ID,
  2. Имя пользователя,
  3. Пароль,
  4. loginAttempt.

И допустим, у вас есть два текстовых поля на вашей странице Login.aspx

  1. TextBoxUserName ,
  2. TextBoxPassword .

Допустим, у вас есть одна запись в ваших tblUsers, подобная этой

 Id           : 1
UserName     : rammstein
Password     : ohnedich
LoginAttempt : 0
  

Теперь вы находитесь в своем коде Login.aspx.cs

у вас есть метод, и в нем у вас есть

 TblUsers user = new TblUsers();
  

И у вас есть bool login = false; .
У вас есть имя пользователя TextBoxUserName.Text , вы проверяете, существует ли пользователь с этим именем пользователя, затем, если он существует, вы выполняете приведенный ниже код.

Давайте проследим за этим сценарием

Данный пользователь пытался войти с

 UserName:rammstein 
Password:duhast
  

Проверил вашу базу данных с именем пользователя rammstein и нашел его, и взял эту запись в свой TblpUsers user , затем вы проверили user.Password TextBoxPassword.Text , соответствует ли и.Ну, это не будет соответствовать приведенному выше примеру, потому что

user.Password ohnedich однако TextBox.Password это duhast так.Это означает, что вход в систему не завершен, поэтому вы устанавливаете значение false для вашего bool login .

Все остальное относится к приведенному ниже коду с if-else условием

 if(user.LoginAttempt < 3){

      if(!login)
      {
          user.LoginAttempt = user.LoginAttempt   1;
      }
      else
      {
          user.LoginAttempt = 0;
      }
}
else
{
  //do something
}
  

Комментарии:

1. Что такое user и login здесь?

2. @KarsM Я добавил некоторые пояснения, дайте мне знать, если вам понадобится дополнительная помощь. Удачи.

Ответ №3:

Несколько решений:

1) Переменная сеанса (правильное решение)

2) Статическая переменная класса (не очень хорошее решение)

3) Поле записи БД (лучшее решение)

4) Передавать переменную флага взад и вперед между представлением и контроллером (не очень хорошая идея).

5) Файл cookie браузера (может быть очищен)

Комментарии:

1. НЕ используйте статическую переменную для хранения количества попыток входа в систему — это одно значение будет общим для всех пользователей!

2. НЕ используйте cookie, что мешает пользователю удалять этот cookie между попытками!

3. @Hans — lol … может быть, мне следует включить отказ от ответственности за небезопасные и безопасные методы.

4. @Hans — вы можете использовать статические классы, если используете пары ключ / значение с ключом, являющимся идентификатором, но тогда вы тратите ресурсы, имитирующие сеанс. Я согласен, что DB — лучший подход для этого.

5. @TomasJansson — Я согласен. Большинство пользователей этого не сделают, но именно поэтому я can be cleared указал в скобках.