Существуют некоторые другой / лучшие решения, уже отправленные, но для полноты, я полагал, что упомяну это:
, Если Ваше основное беспокойство является снижением производительности, и Вы смотрите верный стук , тогда Вы на самом деле имеете дело с DoS-атакой, и необходимо, вероятно, попытаться обработать его соответственно. Один общий подход должен просто отбросить пакеты от IP в брандмауэре после многих соединений во вторую/минуту/и т.д. Например, стандартный брандмауэр Linux, iptables, имеет стандартную операционную функцию соответствия 'hashlimit', который мог использоваться для корреляции запросов на установление соединения на единицу измерения времени к IP-адресу.
, Хотя, этот вопрос, вероятно, был бы более склонным для следующей ТАКИМ-ОБРАЗОМ-ПРОИЗВОДНОЙ, упомянутой на последнем ТАКИМ-ОБРАЗОМ-ПОДКАСТЕ, это еще не запустилось, таким образом, я предполагаю, что нормально отвечать:)
РЕДАКТИРОВАНИЕ:
, Как указано novatrust, существуют все еще ISPs на самом деле не присвоение дюйм/с их клиентам, так эффективно, клиент сценария такого ISP отключил бы все-клиентов от того ISP.
Мы должны предотвратить или предупредить пользователя о том, что при выполнении этих действий он потеряет свои данные.
Чтобы объяснить, что я использовал два текстовых поля, одну кнопку отправки Asp.net с идентификатором TestButton. Другие элементы управления обратной передачей, которые я использовал: Еще одна кнопка asp.net, один флажок со свойством autopostback true, один раскрывающийся список со свойством autopostback true. Теперь я использовал все эти элементы управления обратной передачей, чтобы показать вам, что нам также нужно показывать пользователю подсказку о потере данных, когда пользователь выполняет действия с этими элементами управления. При нажатии кнопки отправки мы не будем показывать подсказку, так как мы должны отправить данные с помощью этого управляющего действия. Вот пример кода. Я установил метод window.onbeforeunload для изменения элементов управления.
<html >
<head id="Head1">
<title></title>
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
$(function()
{
// Prevent accidental navigation away
$(':input').bind(
'change', function() { setConfirmUnload(true); });
$('.noprompt-required').click(
function() { setConfirmUnload(false); });
function setConfirmUnload(on)
{
window.onbeforeunload = on ? unloadMessage : null;
}
function unloadMessage()
{
return ('You have entered new data on this page. ' +
'If you navigate away from this page without ' +
'first saving your data, the changes will be lost.');
}
window.onerror = UnspecifiedErrorHandler;
function UnspecifiedErrorHandler()
{
return true;
}
});
</script>
</head>
<body>
<form id="form1" name="myForm" runat="server">
<div>
First Name :<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br />
<br />
Last Name :<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br />
<br />
IsMarried :<asp:CheckBox ID="CheckBox1" runat="server" /><br />
<br />
<asp:Button runat="server" ID="TestButton" Text="Submit" CssClass="noprompt-required" /><br />
<br />
<br />
<br />
<br />
<asp:Button runat="server" ID="AnotherPostbackButton" Text="AnotherPostbackButton"
/><br />
<br />
<asp:CheckBox runat="server" ID="CheckboxWhichCausePostback" Text="CheckboxWhichCausePostback"
AutoPostBack="true" /><br />
<br />
DropdownWhichCausePostback<asp:DropDownList runat="server" ID="DropdownWhichCausePostback"
AutoPostBack="true">
<asp:ListItem Text="Text1"></asp:ListItem>
<asp:ListItem Text="Text2"></asp:ListItem>
</asp:DropDownList>
<br />
<br />
</div>
</form>
</body>
Выше я использовал:
$('.noprompt-required').click(function() { setConfirmUnload(false); });
What В этой строке я вызвал метод setConfirmUnload
и передал false в качестве аргумента, который установит для window.onbeforeunload
значение null.
Это означает, что на любом элементе управления, где вы хотите, чтобы этот пользователь не запрашивался, присвойте этому элементу управления класс .noprompt-required
, а остальное оставьте как есть.
На самом деле это не JQuery, я использую следующие функции:
function setConfirmUnload(on) {
window.onbeforeunload = (on) ? unloadMessage : null;
}
function unloadMessage() {
return "Are you sure you want to leave this page";
}
Затем в любое время вы можете вызвать
setConfirmUnload (true), чтобы включить подтверждение, или false, если хотите чтобы позволить им закрыть экран без предупреждения (например, если у вас есть кнопка закрытия).
Вы можете попробовать событие unload :
$(window).unload( function () { alert("Bye now!"); } );
http://docs.jquery.com/Events/unload
Я предполагаю, что эта очистка включена только клиент. Было бы интересно узнать природу этих «чисток».