Как запомнить прогресс пользователя через приложение? - PullRequest
0 голосов
/ 26 января 2012

У меня проблема с архитектурой, которую мне не удалось решить. Я разрабатываю небольшую игру на PHP и Javascript, и мне нужно сохранить прогресс пользователя. Теперь проблема в том, что PHP не может определить, когда пользователь выигрывает уровень: это сделано в Javascript. Есть ли способ сохранить прогресс пользователя, когда он выиграет уровень?

Например, когда пользователь получает уровень 1, он получает доступ к уровню 2. Если он пытается получить доступ к уровню 2, не пройдя предыдущий уровень, он перенаправляется на последний завершенный уровень. В моем контроллере я делал следующее:

if (1 !== $id) {
    if ($app['session']->get('last_level') !== ($id - 1)) {
        // redirect the user
    }
}

Теперь мне нужен способ сохранить значение last_level в сеансе, операция, которая не может быть смоделирована пользователем.

Есть подсказки?

Ответы [ 3 ]

1 голос
/ 26 января 2012

Если пользователь завершает уровень, а затем остается на той же странице, выполняя дополнительную работу:

Тогда вы, вероятно, захотите, чтобы Ajax отправил информацию о новом уровне на сервер, как только будет достигнут новый уровень. Таким образом:

  1. Используйте куки для хранения вашего идентификатора сессии php

  2. В своем клиенте Javascript используйте Ajax для вызова URL-адреса php на вашем сервере всякий раз, когда пользователь выходит на новый уровень. Отправить новый уровень в качестве параметра. Можно использовать POST или GET, не имеет значения.

  3. Программа php получит идентификатор сессии в файле cookie и новый уровень в качестве параметра. Программа php найдет идентификатор пользователя из идентификатора сеанса и сохранит новый уровень в базе данных.

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

Если пользователь нажимает кнопку «Далее», чтобы перейти к следующему уровню: Используйте Javascript, а не Ajax, чтобы изменить параметры POST кнопки «Далее».

Вы бы использовали POST, а не GET, поскольку просмотр URL-адреса foo.com/game?level=5 слишком очевиден для людей, чтобы обманывать вашу игру. POST не будет показывать параметр уровня в URL. Больше безопасности: добавьте параметр контрольной суммы.

Если что-либо из перечисленного не понятно, задайте его в комментариях или в качестве дополнительного вопроса.

1 голос
/ 26 января 2012

Вы захотите выполнить различные last_level вычисления на сервере. Таким образом, пользователь не сможет взломать JavaScript и отправить что-либо в специально созданной форме. Поэтому, в зависимости от вашей системы хранения (хранилище KV, база данных, текстовый файл и т. Д.), Поместите это значение туда и получите его.

Аякс может помочь вам, но в этом нет необходимости. Это зависит от того, как настроена ваша игра. Но если они пройдут уровень, сервер должен быть уведомлен.

0 голосов
/ 26 января 2012

Если вы счастливы принять слово javascript за то, что уровень пройден, тогда просто установите cookie из javascript.

операция, которая не может быть смоделирована пользователем

Извините - но если это javascript, который определяет, когда они завершили уровень, то ничто не мешает пользователю фальсифицировать результаты.

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