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

  • Автор темы Автор темы art22
  • Дата начала Дата начала

art22

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

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

Есть ID по которому нужно ограничивать
 
очень мало данных вводных для анализа.
Укажите какой сервер (на базе какой ОС), что за обработчик запросов там присутствует (Rest API и т.п...) Или же это исходящие с сервера запросы..... Желательно с примером того что сейчас и того что требуется.
 
  • Оценить
Реакции: ukrainec2014
Нужно фиксировать время каждого запроса для каждого ID и прибавлять 30 минут к нему. Сохранять так:
ID:TimeStamp. Каждое обращение к списку удаляет из него те строки, где TimeStamp меньше текущего значения времени, а уже потом принимает решение пускать или не пускать.
 
для каждого ID и прибавлять 30 минут к нему.
сделал, пришлось время прописать без разделении 20:35 -> 2035. но когда день меняется не работает. так как идет сравнение между

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

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

Вложения

  • 2.xmlz
    2.xmlz
    23,5 KB · Просмотры: 0
сделал, пришлось время прописать без разделении 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 в зависимости от задачи.
 
Phoenix78. честно говоря не очень понял что с этим сделать, я в программировании не очень. Жаль нельзя в одном кубике сравнивать даты и время, приходиться заморачиваться(
 
Прикрепляю сам шаблон может кому то надо
Не стал рисковать) Вряд ли кому надо такое решение.
Примерно так это работает
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 время еще не пришло");//иначе выходим по красной ветке
}
 

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