Как управлять состояниями веб-игр Asp.net - PullRequest
1 голос
/ 03 ноября 2010

Скажем, мне нужно разрабатывать онлайн-игры с сыром, и игра просто между компьютером и настоящим человеком.

Требуется, чтобы состояния (например, шаги, история выигрышей) использовались даже после короткого времени, когда пользователь закрывал браузеры или сервер временно отключался Таким образом, когда игрок возвращается на страницу игры, он должен продолжать играть с того, что он играл в прошлый раз, и также получать свою историю игр.

Это определенно нужен cookie, чтобы включить все это, но я беспокоюсь о безопасности его использования. Я должен запретить ppl взломать cookie напрямую, чтобы изменить историю или что-то в этом роде. Моя мысль состоит в том, чтобы серверный конец назначил токен клиенту. Все шаги и данные истории связаны с этой строкой токена и хранятся в постоянном слое (базе данных). Таким образом, пользователь не имеет представления об изменении данных в БД.

Это избыточный дизайн или есть способ зашифровать куки.

Поправь меня, если я ошибаюсь.

Ответы [ 3 ]

2 голосов
/ 04 ноября 2010

Как вы уже упоминали, у вас есть 2 варианта:

1) Шифровать текущее состояние игры и поместить его в файл cookie

Это может определенносделать так, чтобы клиент не мог изменить состояние, используя шифрование.Однако вам также нужно будет отправить текстовую версию игрового состояния клиенту.Когда клиент отправляет обратно свое перемещение, вы расшифровываете cookie, чтобы получить последнее состояние, проверяете его перемещение и изменяете состояние.Промойте и повторите.

Недостатком этого является увеличение трафика и необходимость реализации де / шифрования.

2) Сохранение состояния игры на сервере и использование файла cookieв качестве идентификатора пользователя (или системы входа в систему)

Это, вероятно, лучшее решение, поскольку оно позволит вам правильно структурировать данные и уменьшить объем трафика для пользователя.Вам просто нужно отправить текущее состояние игры клиенту.Затем клиент просто отправляет обратно свой ход.Когда вы получаете их ход, вы загружаете игру из хранилища, проверяете, что клиент сделал допустимый режим, а затем корректируете состояние.

Недостатком является то, что вам нужно некоторое время сохранять состояние в конце, либов БД или кеш (Velocity?).Также рассмотрим решение NoSQL для этого, возможно.

0 голосов
/ 04 ноября 2010

Почему бы не зашифровать данные cookie?Вы можете использовать эти методы расширения, чтобы добавить простой метод шифрования / дешифрования к строковому классу: http://www.extensionmethod.net/Details.aspx?ID=69

0 голосов
/ 03 ноября 2010

Это то, что я бы сделал.

  1. Сделайте всю игровую логику на стороне клиента.Запуск ИИ противника на вашем сервере будет очень дорогостоящим.

  2. Сохранение состояния с помощью window.localStorage (возможно, есть запасной вариант с использованием ajax для старых браузеров)

  3. Отправьте шаги на ваш сервер, чтобы проверить ходы, зарегистрировать выигрыш и т. Д.

Это не единственный способ и может быть не лучшим в вашей ситуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...