Звернутися до підтримки

Відповідаємо електронною поштою, зазвичай протягом двох днів.

Google reCAPTCHA перевіряє це звернення на зловживання; дані передаються до Google. Скрипт завантажується лише під час відкриття цієї форми.

← Усі записи

Номери лічильників тепер звіряються з обома таблицями

Про матеріали та їх перевірку

У цій статті

Кожен лічильник тут має номер. Він стоїть у коді вставки, в адресі статистики і на стількох сторінках, на скількох власник його розмістив. Номери видаються так: береться випадковий між 100 і 9 999 999 999, і перевіряється, чи він не зайнятий.

Перевіряється одна таблиця.

Та, інша таблиця

Лічильники, які давно не фіксували відвідувань, переносяться до таблиці архіву. Це звичайне прибирання — воно тримає робочу таблицю малою, а запити до неї швидкими. 24 серпня 2026 року в архіві лежало 212 771 номерів, і жодного з них не було в таблиці, яку перевіряє генератор.

Отже, кожен із них міг бути виданий заново.

Проти десяти мільярдів можливих номерів це ймовірність зіткнення близько 0,002 відсотка: приблизно один із 47 000 нових лічильників дістав би номер, що належав комусь іншому. Отже, такі зіткнення з’являлися б рідко, але вони не абстрактні. Лічильник потрапляє до архіву саме тому, що його сторінка затихла — але затихла сторінка не обов’язково видалена. Якщо стара вставка досі стоїть у якійсь забутій бічній колонці і ця сторінка отримує відвідувача, відвідування потрапляє в чужу статистику, на лічильник, створений роками пізніше.

47 квадратів, кожен — тисяча нових лічильниківприблизно один із цих 47 000 лічильників дістає старий номерархівних номерів, яких генератор не перевіряв: 212 771у просторі близько десяти мільярдів можливих номерів

Чи це колись сталося, з даних встановити не можна: ніщо не відрізняє відвідування, яке прийшло цим шляхом, від будь-якого іншого. Встановити можна інше — що статися це більше не може.

Дві зміни

Генератор тепер перевіряє обидві таблиці. А видалення лічильника — яке від того самого дня власник може виконати сам — лишає надгробок: рядок, що складається з одного лише номера, щоб його ніколи не видали повторно. Видалення прибирає в одній транзакції дані з двадцяти таблиць і не зберігає копії, у чому й весь сенс видалення; номер — єдине, що має лишитися спаленим.

Чому це лишилося непоміченим

Генератор писався, коли таблиця була одна. Архів з’явився пізніше, з іншої причини, розв’язуючи інше завдання, і ніщо не пов’язало ці дві думки. Обидві частини були окремо правильні.

Таку форму має більшість подібних випадків. Не помилка, якої хтось припустився в конкретному місці, а наслідок, побачити який ніхто не стояв у придатній точці. Єдиний захист — іти шукати навмисно, і питання, яке знайшло цей випадок, було доволі звичайним: перш ніж будувати видалення — де ще живе номер лічильника?

Реклама