#asp.net
#asp.net
Вопрос:
Я хочу выполнить какое-то действие, если кнопка нажата 3 раза. Точно так же, как если пользователи вводят неправильный пароль для страницы 3 раза, страница должна быть перенаправлена на другую страницу или что-то в этом роде.
Как выполнить действие в ASP.NET C #, если кнопка нажата в 3-й раз?
Ответ №1:
Чтобы проверить, выполнял ли пользователь действие «x» раз, вам нужно как-то его сохранить. Если вы используете базу данных отношений, вы можете, например, вызвать таблицу LoginAttempts и там сохранить все неудачные логины. Когда у вас есть эта таблица, вы можете построить свою логику на ее основе.
Комментарии:
1. Это правда … и он, вероятно, мог бы просто использовать поставщика по умолчанию.
Ответ №2:
Я бы использовал переменную сеанса.
Другим решением может быть наличие столбца в таблице users с именем loginAttempt(int) (по умолчанию 0), как бы я использовал этот столбец
Допустим, у вас есть таблица в вашей базе данных под названием tblUsers с этими столбцами
- ID,
- Имя пользователя,
- Пароль,
- loginAttempt.
И допустим, у вас есть два текстовых поля на вашей странице Login.aspx
TextBoxUserName
,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
указал в скобках.