Есть 2 возможных сценария, с которыми вы можете столкнуться.Позвольте мне начать с простого:
a) Если веб-приложение разработано так, что игра запускается сразу после загрузки страницы, ваша жизнь будет простой.Скрипт, который отсылает игру, должен пометить базу данных временем, в которое игра была отослана.Это было бы время начала.Время окончания будет записано, когда клиент отправит сообщение «уровень завершен».Поскольку в обоих случаях время записывается на стороне сервера, клиенту не нужно хранить время.Однако здесь есть одна загвоздка.См. Раздел The Catch ниже.
b) Если клиент загружает приложение, но игра начинается намного позже, когда пользователь нажимает «play» и т. Д., Ваша жизнь будет немноготруднее.В этом случае вам потребуется сообщение «уровень начат», а также сообщение «уровень завершен», поступающий от клиента.Опять же, было бы лучше держать время на сервере, а не на клиенте.Однако перед началом игры вам необходимо убедиться, что клиент получает ACK на сообщение «уровень начат», чтобы пользователь не играл в игру, которая не была записана сервером.(Возможно, сообщение «уровень начался» никогда не достигло сервера).
Поймать : вам нужно понять, что защита не возможна для обмана пользователяна его счетах!JS полностью открыт, и независимо от того, как вы реализуете свои начальные / конечные вызовы на сервер, любой пользователь может написать сценарий для отправки аналогичных вызовов на сервер в любой интервал времени, который он желает использовать.Даже если вы используете сеанс / cookie, они могут быть легко воспроизведены.(Использование сниффера, например).Таким образом, вы должны осознать и принять конструктивные ограничения, налагаемые архитектурой и кодом HTML / JS в этих пределах.Следовательно, лучшая идея состоит в том, чтобы написать код для пользователей , а не в том, чтобы хакеры не отправляли мошеннические вызовы.Сделайте вашу игру интересной для людей, которые будут играть в вашу игру и не беспокоиться о том, что хакеры обманывают свои результаты - они все равно не будут вашей целевой аудиторией.