2012-01-26 3 views
-1

私は解決できなかったアーキテクチャ上の問題に直面しています。私はPHPとJavascriptで小さなゲームを開発しています。ユーザーの進歩を救う必要があります。さて、問題は、PHPがユーザーがいつレベルを獲得するかを判断できないことです.Javascriptで行われます。彼がレベルを獲得したときにユーザーの進歩を救う方法はありますか?アプリケーションを通してユーザーの進行状況を記憶する方法は?

たとえば、ユーザーがレベル1に勝った場合、ユーザーはレベル2にアクセスします。レベル2にアクセスしようとすると、前のレベルを完了せずに最後に完了したレベルにリダイレクトされます。私のコントローラでは、私は次のことをやっていた:

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

今私は、セッションにユーザーによってシミュレートすることができない操作をlast_level値を格納するための方法が必要です。

ヒント

+0

あなたはAJAXについて聞いたことがありますか? – dynamic

+0

AJAXリクエストをユーザーがシミュレートすることはできませんか? –

+0

ちょっとした知識があればブラウザゲームをすることはできません。ごめんなさい。私はあなたがこれと一緒に行くより簡単な何かで始めることをお勧めします – dynamic

答えて

1

異なるlast_levelの計算をサーバーで実行したいと思うでしょう。そうすれば、ユーザーはJavaScriptをハックすることができず、特別に細工された形式で何かを提出することができます。だからあなたのストレージシステム(KVストア、データベース、テキストファイルなど)に応じて、そこにその値を入れて、それを取得します。

アヤックスがあなたを助けることができますが、必ずしもそうではありません。ゲームがどのように設定されているかによって異なります。しかし、彼らがレベルを完了した場合、サーバーに通知する必要があります。

+0

はい、それは私がやりたいことです:セッションにlast_levelの値を入れてください。問題は、サーバーが最後に完了したレベルを判断する方法がないことです。唯一の方法はAJAXのリクエストですが、何とかシミュレートできると確信していました。 –

+0

これを行う方法はAjaxだけではありません。他にもオプションがあります。 Ajaxはそれをやっている/いい/方法ですが。ゲームの例がない場合、これを行う方法について説明するのは難しいです。しかし、あなたができることは、レベルの一部が完了したときにJavaScriptセットフラグを持たせることです。このようにして、それらを使用して値を計算することができます。ページがロードされたときにユーザーのID /セッション/に対してその値を実行し、その値を使用して、どのレベルにあるかを計算する関数を実行します。次に、次のレベルを取得するには、以前に計算したレベルの値を使用します。 – Tim

+0

これは単なる非常に簡単なサンプルアプリケーションなので、可能性はないと思います。タイマーがあり、ユーザーはタイマーを5〜6秒間停止する必要があります。ここで計算するものは何もない...間違っている? –

1

ユーザーがレベルを完了し、その後、追加の仕事をして同じページにとどまる場合:

次に、あなたは、おそらくAjaxが、すぐに新しいレベルを持っているとしてサーバーに新しいレベルの情報をお送りしたいと思います達成された。したがって:

  1. 使用クッキーユーザーが新しいレベルを獲得するたびに、サーバー上のPHPのURLを呼び出すためのAjaxを使用して、あなたのJavascriptのクライアントからPHPのセッションID

  2. を格納します。新しいレベルをパラメータとして送信します。 POSTやGETを使用することはできますが、問題はありません。

  3. PHPプログラムは、セッションIDをクッキーに、新しいレベルをパラメータとして受け取ります。 PHPプログラムは、セッションIDからユーザIDを検索し、新しいレベルのデータベースを保存します。

  4. 次回、phpプログラムのメインURLが呼び出されると、ユーザーのレベルを調べることができます。

ユーザーが次のレベルに行くために以降、「次へ」ボタンを押した場合: JavaScriptを使用、ないアヤックス、「次へ」ボタンのPOSTパラメータを変更します。

foo.com/game?level=5のURLを見ていると、人々があなたのゲームを騙すのはあまりにも明白なので、GETではなくPOSTを使用します。 POSTはurlのlevelパラメータを表示しません。セキュリティの強化:チェックサムパラメータを追加します。

上記のいずれかが不明な場合は、コメントまたはフォローアップの質問としてお尋ねください。

+0

ええと...大丈夫、それは私が思いついた解決策のほんの一部です。 「チェックサムパラメータを追加する」ことによって、正確に何分ですか? –

+0

レベルのチェックサム(CRC32など)である第2パラメータを送信します。または、チェックサムのレベルに一定値を加えたもの(入力文字列を長くする)。サーバー上でチェックサムを再度計算します。チェックサムがparam!=計算されたチェックサムとして送信された場合、何かが間違っています。これは本当のセキュリティではありませんが、カジュアルなユーザーは不正行為を遅らせるでしょう。不正行為がないようにするには、サーバー上のレベルを計算(または検証)する必要があります。 [CRC32 in Javascript](http://noteslog.com/post/crc32-for-javascript/) –

0

レベルが完了したら、javascriptからクッキーを設定してください。

ユーザー申し訳

でシミュレートすることができない操作 - それは、彼らはレベルを完了したときdtermines javascriptのだならば、結果を改ざんするユーザーを停止することは何もありません。

+0

はい、わかっています。間違いはJavascriptを使うことだったと思います。実際の計算を行うにはPHPを使用し、タイマーを表示するにはJavascriptを使用すると思います。 –