@nektobit

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

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

Я не могу использовать cookie, нужно чтобы скрипт отработал на устройствах без cookie. Писать в бд? Ajax?
  • Вопрос задан
  • 380 просмотров
Решения вопроса 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.

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

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

Войти через центр авторизации
Похожие вопросы