ブラウザがサーバーに与えるものを決して信用してはいけません。ブラウザは必要なすべてのリクエストを行うことができます (たとえば、5000 フィート前方に移動します) が、サーバーがリクエストを見て、「すごい、そんなことはできません! 最大速度は 2 フィート/秒です」と言った場合! 次に、「移動のリクエスト」を拒否するか、無視します。選択は、実装に応じて異なります。
たとえば、クライアント (ブラウザまたはデスクトップ上のアプリケーション) は、必要なすべてのデータを格納できます。HPとリソースを保存できます。サーバーには、これらの独自のコピーもあります。誰かがメモリ変更ツール (Cheat Engine など) を使用した場合、クライアントのデータを変更することしかできません (たとえば、100 ドルから 1,000,000 ドルではなく)。しかし、これは何の意味もありません。クライアントが 50,000 ドルのアイテムを購入するリクエストを行った場合、サーバーはそのリクエストを検証するからです。クライアントではなくサーバー上のお金を見て、ユーザーの資金が不足していることに気づきます。ユーザーに「お金が足りない」と伝えるだけで、NPO法人の取引が成立します。
クライアントがクライアントの内部メモリをいじろうとしても、クライアントが正しく機能しなくなる心配はありません。サーバーがゲーム状態の変更に対するすべてのリクエストを承認することを確認してください。すべてがうまくいくでしょう.
ネットワークへのスパム送信を回避し、ユーザーの移動を有効に保ちたい場合、クライアントは、サーバーが要求を承認すると想定できます。したがって、ユーザーが特定の距離を移動できるようにして、数秒後に単一のリクエストを送信するか、複数のリクエストを送信して、サーバーがリクエストを承認するのを待つ間にキャラクターが動くことを示すことができます。これにより、複数のリクエストを行い、サーバーが応答するのに時間がかかる場合、クライアントのサーバーとの非同期化という新しい問題が発生します。
一般に、多くのリクエストを送信する必要があり、ユーザーが何かを行うたびにリクエストを送信する必要があります。これは、他のユーザーにも自分が行っていることを確認したいためです。これを回避する方法はありませんが、巧妙な圧縮と遅延戦術を使用して、クライアントがよりスムーズに動作できるようにすることができます。
SQL サーバーに常にアクセスすることを避けたい場合は、Memcacheなどのキャッシング ツールを使用できます。これは、PHP で非常に優れたサポートが提供されているため便利です。Memcache は、非常に高速なデータ ストレージのために必要なものをすべてメモリに格納できます。もちろん、キャッシュをデータベースと同期する必要があるため、これには注意が必要です。