Задать вопрос
@nektobit

JS и Backspace. Как запретить повторное исполнение скрипта?

Имеем ситуацию:
1. Загружается страница - вместе с ней грузится inline js код.
2. Код должен выполнится один раз, и он выполняется.
3. Пользователь уходит со страницы.
4. Пользователь возвращается на страницы при помощи backspace! Скрипт выполнится второй раз...

Я не могу использовать cookie, нужно чтобы скрипт отработал на устройствах без cookie. Писать в бд? Ajax?
  • Вопрос задан
  • 385 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
riky
@riky
Laravel
как я уже писал без кук не будет и сессий, поэтому ajax запросы делать бесполезно, вы все равно не поймете что 2 запроса пришли от одного клиента.

используйте библиотеку samy.pl/evercookie которая пытается сохранить данные на клиенте всеми мыслимыми и немыслимыми способами, в том числе localStorage и всевозможные кеши браузера.

используется для случаев когда нужно все таки трекать пользователя, даже если он чистит куки.

количество способов восхищает

- Standard HTTP Cookies
- HTTP Strict Transport Security (HSTS) Pinning
- Local Shared Objects (Flash Cookies)
- Silverlight Isolated Storage
- Storing cookies in RGB values of auto-generated, force-cached
PNGs using HTML5 Canvas tag to read pixels (cookies) back out
- Storing cookies in Web History
- Storing cookies in HTTP ETags
- Storing cookies in Web cache
- window.name caching
- Internet Explorer userData storage
- HTML5 Session Storage
- HTML5 Local Storage
- HTML5 Global Storage
- HTML5 Database Storage via SQLite
- HTML5 IndexedDB
- Java JNLP PersistenceService
- Java CVE-2013-0422 exploit (applet sandbox escaping)


хотя конечно в 99,9% случаев будут все равно использоваться куки, редко у кого они выключены.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@djay
Да AJAX + Сессия на стороне сервера:

Прежде чем исполнять, инлайн JS-код, выполняешь Ajax-запрос и смотришь есть ли в сессии значение active = true. Если нет, то выполняешь код, а потом сразу отсылаешь еще один запрос который пишет в сессию active = true.

Вроде все. Теперь не важно нажал ли пользователь бекСпАйс или нет, код будет выполнятся только один раз.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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