Как вы уже упоминали, у вас есть 2 варианта:
1) Шифровать текущее состояние игры и поместить его в файл cookie
Это может определенносделать так, чтобы клиент не мог изменить состояние, используя шифрование.Однако вам также нужно будет отправить текстовую версию игрового состояния клиенту.Когда клиент отправляет обратно свое перемещение, вы расшифровываете cookie, чтобы получить последнее состояние, проверяете его перемещение и изменяете состояние.Промойте и повторите.
Недостатком этого является увеличение трафика и необходимость реализации де / шифрования.
2) Сохранение состояния игры на сервере и использование файла cookieв качестве идентификатора пользователя (или системы входа в систему)
Это, вероятно, лучшее решение, поскольку оно позволит вам правильно структурировать данные и уменьшить объем трафика для пользователя.Вам просто нужно отправить текущее состояние игры клиенту.Затем клиент просто отправляет обратно свой ход.Когда вы получаете их ход, вы загружаете игру из хранилища, проверяете, что клиент сделал допустимый режим, а затем корректируете состояние.
Недостатком является то, что вам нужно некоторое время сохранять состояние в конце, либов БД или кеш (Velocity?).Также рассмотрим решение NoSQL для этого, возможно.