8: 2015-07-31 (金) 17:50:04 njf |
9: 2015-08-01 (土) 17:31:58 njf |
| 以上でサーバーサイドは終わりです。次にクライアントサイドを解説します。 | | 以上でサーバーサイドは終わりです。次にクライアントサイドを解説します。 |
| | | |
- | 準備中 | + | *クライアントサイド [#z1744dce] |
| + | Flash側では単にJSONデータをパースしたりダンプするだけであとは通常の送信処理です。 |
| + | |
| + | 送信データをダンプするには |
| + | |
| + | var data:Object = new Object(); |
| + | data["key"] = "value"; |
| + | JSON.stringify(data); |
| + | |
| + | 受信データをパースするには |
| + | var jsonData:Object; |
| + | try |
| + | { |
| + | jsonData = JSON.parse(data); |
| + | }catch (e:Error) { |
| + | trace(e,data); |
| + | } |
| + | です。 |
| + | |
| + | *さらに改良するには [#kf41b5d8] |
| + | これで最低限のデータの保存と呼び出しが出来るようになりました。しかし、実際に使うにはまだ問題が生ずる場合があります。 |
| + | **チート対策 [#q662c5f9] |
| + | もしランキングなどを実装するならチート対策が必須となります。このままでは送信データを容易に書き換えられるため、すぐにランキングにおかしなデータを登録されるでしょう。経験的には対策しなかった場合、ランキングに送られるデータの数パーセント程度がチートを行ったものです。数百程度のデータ数でも上位10位ぐらいすぐにチートで埋まってしまいます。 |
| + | クライアント側での対策は「[[ActionScriptでチート検出]]」こちらに書きました。 |
| + | |
| + | これに加えてデータ送信時にも署名を行うなどしてデータの改ざんを防ぐ必要があります。 |
| + | たとえば、jsonデータを送信するときに、そのmd5ハッシュを同時に送信し、サーバー側でチェックするなどです。 |
| + | |
| + | **2重登録チェック [#y2834953] |
| + | 前述のように、データを差分で送るとブラウザを2つあげてそれぞれ違うデータを登録すると矛盾したデータが保存されてしまう可能性があります。これはプレイヤー側が意図的に行わなくてもいつでも起こりうる不具合です。 |
| + | |
| + | サーバー側でそれぞれの値の整合性チェックを行うと他の不具合も防げて確実ですが、単に2重登録を防ぐためだけなら他の方法もあります。たとえばサーバー側で保存回数を数えておいて、その値をクライアントに戻すようにし、クライアントはその値も保存時にサーバーに送信するようにしておきます。サーバー側ではクライアントから送られてきた値がサーバー側の値と等しければそのまま保存し、保存回数をインクリメントしますが、違う場合はエラーにします。 |
| + | |
| + | すると2つのクライアントから別々に保存しようとしても、後から保存する方は保存回数が1つ前になってしまうので、エラーになります。 |
| + | |
| + | *サンプルコード [#ucddcda4] |
| + | ここで解説したサンプルコードはこちらです。クライアント側のURLやcrossdomain.xmlの中のURLは環境に合わせて書き換えてください。 |
| + | &ref(gaeWikiSample.zip); |