Как сделать часовые пояса в ASP.NET MVC?

Существует несколько решений, которые Вы могли взять, на основе уровня сложности, в которую Вы хотите войти.

Они - все на основе отслеживания IP, которое разваливается несколько в соответствии с ботнетами и облачными вычислениями, но должно мешать подавляющему большинству botters. Возможности, что у Joe Random есть облако ботов в его распоряжении, намного ниже, чем шанс, что он просто запускает бота Woot, которого он загрузил где-нибудь, таким образом, он может получить свой мешок дерьма.

Простая Регулировка

На очень простом, сыром уровне, Вы могли отрегулировать запросы на IP в период времени. Сделайте некоторый анализ и решите, что законный пользователь получит доступ к сайту не больше, чем X раз в час. Запросы ограничения на IP в час в том числе и боты должны будут решительно уменьшить свою частоту запросов, или они заблокируют себя в течение следующих 58 минут и будут абсолютно слепыми. Это не решает проблему бота отдельно, но она действительно уменьшает загрузку и увеличивает шанс, что у законных пользователей будет выстрел в объект.

Адаптивная Регулировка

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

End-of-the-line капча

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

комбинация А вышеупомянутого

Реализация основная, щедрая регулировка для остановки самого оскорбительного из ботов, при принятии во внимание потенциала для нескольких законных пользователей позади единственного корпоративного IP. Число сокращения было бы очень высоко - Вы процитировали ботов, поражающих Ваш сайт 10x/sec, который является 2,16 миллионами запросов/час, который является, очевидно далек выше любого законного использования, даже для самых больших корпоративных сетей или совместно использованного дюйм/с

Реализация очередь выравнивания нагрузки так, чтобы Вы были оштрафованы за приведение в рабочее состояние больше, чем Ваша доля серверных соединений и пропускной способности. Это штрафует людей в общих корпоративных пулах, но это не препятствует тому, чтобы они использовали сайт, и их нарушение должно быть намного менее ужасным, чем Ваш botters, таким образом, их пенализация должна быть менее серьезной.

Наконец при превышении некоторого порога для запросов на час (который может быть далеким, далеко, намного ниже, чем "автоматически отбрасывание соединение" сокращение), затем потребуйте, чтобы пользователь проверил с капчой.

Тот путь, пользователи, которые законно используют сайт и только имеют 84 запроса в час, даже когда они мегавзволнованы, не замечают изменения в сайте, медленном вообще. Однако Joe Botter находит себя застрявшим в дилемме. Он может также:

  • Сдувают его квоту запроса с его текущим поведением и не смочь получить доступ к сайту вообще, или
  • Запрос как раз для не выдувания квоты запроса, которая дает ему информацию в реальном времени на более низких уровнях трафика, но заставляет его иметь крупные задержки между запросами в течение времен интенсивного трафика, который сильно ставит под угрозу его способность завершить продажу, прежде чем материально-технические ресурсы будут исчерпаны, или
  • Запрос больше, чем средний пользователь, и закончите тем, что застряли позади капчи, или
  • Запрос не больше, чем средний пользователь, и таким образом имейте преимущество перед средним пользователем.

Только оскорбительные пользователи переносят неисправность обслуживания или увеличения сложности. Законные пользователи не заметят единственного изменения, за исключением того, что у них есть более легкое время, покупая их мешки дерьма.

Дроссель Приложения

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

изобретательный botters будет затем регистрировать многопользовательские идентификаторы и использовать их для достижения их желаемого уровня запроса; можно сражаться с этим путем рассмотрения любых идентификаторов, которые показывают от того же IP в установленный срок, чтобы быть тем же идентификатором, и подвергающийся общей регулировке.

, Который оставляет botter без обращения за помощью, но выполнять сеть ботов с одним ботом на IP и зарегистрированной учетной записью Woot на бота. Это, к сожалению, эффективно неотличимо от большого количества несвязанных законных пользователей.

Вы могли использовать эту стратегию в сочетании с одним или несколькими вышеупомянутых стратегий с целью произвести полный эффект предоставления лучшей услуги зарегистрированным пользователям, которые не участвуют в оскорбительных шаблонах использования, прогрессивно штрафуя других пользователей, оба зарегистрированные и незарегистрированные, согласно их состоянию (скоро или зарегистрированный) и уровень злоупотребления, как определено Вашими транспортными метриками.

39
задан alex 12 March 2015 в 16:55
поделиться

3 ответа

Для этой цели , вам определенно следует хранить в базе данных свои временные метки в формате UTC.

Если вам нужно отобразить дату из базы данных на вашем сайте, вы можете сделать это:

DateTime stamp = /* get datetime from the database here, make sure you
                    use the constructor that allows you to specify the 
                    DateTimeKind as UTC. */

//E.g.
//DateTime stamp = new DateTime(2009, 12, 12, 12, 12, 12, DateTimeKind.Utc);

timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(" /* users time zone here */"); 
var convertedTime = TimeZoneInfo.ConvertTime(stamp, timeZoneInfo);

//Print out the date and time
//Console.WriteLine(convertedTime.ToString("yyyy-MM-dd HH-mm-ss")); 

Список часовых поясов уже доступен в .Net, так что вы можете увидеть этот пост о том, как их перечислить . Для ASP.Net MVC вместо того, чтобы печатать тайм-аут, вам нужно назначить преобразованное datetime свойству вашего класса модели, чтобы ваше представление могло использовать его для отображения.

36
ответ дан 27 November 2019 в 02:48
поделиться

Я не могу не подчеркнуть, насколько важно использовать UTC для хранения и обработки любого написанного вами приложения. Даже если вы знаете, что приложение будет использоваться только в одном часовом поясе, работать с UTC все равно намного проще, чем с местным часовым поясом из-за проблем с переходом на летнее время.

На уровне базы данных ничего особенного делать не нужно. Просто создайте обычный столбец datetime, но убедитесь, что он четко задокументирован, что предполагается, что столбец соответствует UTC.

Буду честен, asp.net не является моим опытом, но я думаю, что вы могли бы получить часовой пояс из запроса клиента как-то. Фактически, поскольку правила перехода на летнее время могут быть довольно неясными, в зависимости от региона, может быть лучше использовать java-скрипт, который вычисляет смещение UTC и использует его для преобразования. Даже после Закона об энергетической политике 2005 г. все еще есть некоторые исключения из правил DST, с которыми довольно сложно справиться на стороне сервера. Однако я думаю, что ваша идея позволить клиенту устанавливать свой собственный часовой пояс будет работать в большинстве случаев.

9
ответ дан 27 November 2019 в 02:48
поделиться

Во-первых, проверьте MSDN на предмет документации DateTime и прочтите ее. Вот статья о передовых методах работы с DateTime, которая охватывает часовые пояса и UTC.

Да, вам следует хранить UTC в своей базе данных. Сохранение DateTimes в формате UTC позволит вам переводить время для (и от) пользователей на основе их выбранного часового пояса. Вы на правильном пути!

2
ответ дан 27 November 2019 в 02:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: