Как создать временный ЧС

art22

Client
Регистрация
24.06.2016
Сообщения
484
Благодарностей
68
Баллы
28
Добрый день друзья. Хочу создать временный черный список.

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

Есть ID по которому нужно ограничивать
 

Patcher

Client
Регистрация
06.05.2011
Сообщения
73
Благодарностей
67
Баллы
18
очень мало данных вводных для анализа.
Укажите какой сервер (на базе какой ОС), что за обработчик запросов там присутствует (Rest API и т.п...) Или же это исходящие с сервера запросы..... Желательно с примером того что сейчас и того что требуется.
 
  • Спасибо
Реакции: ukrainec2014

angelxzol

Новичок
Регистрация
12.03.2021
Сообщения
6
Благодарностей
1
Баллы
1
Какая OC?
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 387
Баллы
113
Нужно фиксировать время каждого запроса для каждого ID и прибавлять 30 минут к нему. Сохранять так:
ID:TimeStamp. Каждое обращение к списку удаляет из него те строки, где TimeStamp меньше текущего значения времени, а уже потом принимает решение пускать или не пускать.
 

art22

Client
Регистрация
24.06.2016
Сообщения
484
Благодарностей
68
Баллы
28

art22

Client
Регистрация
24.06.2016
Сообщения
484
Благодарностей
68
Баллы
28
для каждого ID и прибавлять 30 минут к нему.
сделал, пришлось время прописать без разделении 20:35 -> 2035. но когда день меняется не работает. так как идет сравнение между

15:50 с 00:05 т. е. 1550 с 00:05 первое значение больше чем второе и не пропускает( а должен пропустить так как 30 минут уже давно прошел. Как с этим справиться?

Прикрепляю сам шаблон может кому то надо
 

Вложения

  • 23,5 КБ Просмотры: 0

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 694
Баллы
113
сделал, пришлось время прописать без разделении 20:35 -> 2035. но когда день меняется не работает. так как идет сравнение между

15:50 с 00:05 т. е. 1550 с 00:05 первое значение больше чем второе и не пропускает( а должен пропустить так как 30 минут уже давно прошел. Как с этим справиться?

Прикрепляю сам шаблон может кому то надо
дату надо переводить в юникс тайм, или получать разницу дат между форматами datetime в виде timespan

TimeSpan Delta_Time = DateTime.Now-Date_1;
int Time_Difference = Delta_Time.TotalSeconds;
и уже Time_Difference сравнивать с уставкой.

или сразу добавлять уставку в дату и просто сравнивать даты
time_out = time_out.AddSeconds(ustavka);
DateTime.Now> time_out или DateTime.Now < time_out в зависимости от задачи.
 

art22

Client
Регистрация
24.06.2016
Сообщения
484
Благодарностей
68
Баллы
28
Phoenix78. честно говоря не очень понял что с этим сделать, я в программировании не очень. Жаль нельзя в одном кубике сравнивать даты и время, приходиться заморачиваться(
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 387
Баллы
113
Прикрепляю сам шаблон может кому то надо
Не стал рисковать) Вряд ли кому надо такое решение.
Примерно так это работает
C#:
string id = project.Variables["id"].Value;//сюда попадает id
int timer = int.Parse(project.Variables["timer"].Value);//переменная со значением времени(в минутах) пребывания каждого id в черном списке
bool hasPermission = true;//по умолчанию пропускаем
lock(CommonCode.SyncObject){//залочим список, мало ли. Необходимо включить using
    var blackList = project.Lists["blackList"];
    foreach(string s in blackList){//переберем имеющийся список
        string[] data = s.Split(new[]{"-||-"}, StringSplitOptions.None);//разложим найденные строки в массив
        if(DateTime.Now > DateTime.Parse(data.Last()))//если время пребывания в списке истекло
            blackList.Remove(s);//удалим строку
        else //в противном случае проверим, не остается ли текущий id в списке
            if(data.First() == id)//если остался
                hasPermission = false;//выдадим запрет
    }//но список обновится весь так или иначе
    if(hasPermission)//итак, если доступ открыт
        blackList.Add(string.Format(@"{0}-||-{1}", id, DateTime.Now.AddMinutes(timer).ToString()));//записываем id и время его освобождения из списка
    else throw new Exception("для выбранного id время еще не пришло");//иначе выходим по красной ветке
}
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)