進捗は緩やかですが少しずつ改良されている PHP のフレームワークの innoframe ですが今回は Struts にもある同期トークンと同等のものを実装しました。

Webアプリ開発時によくある2度押し対策に有効なのがフレームワークの同期トークンの仕組みを利用する方法。Struts でも画面をまたぐトランザクションの仕組みとして同期トークンの仕組みを提供しています。

この仕組みと同等品を innoframe にも実装しました。実装と言ってもとっても簡単なものなので自前で実装してもできてしまうものなんです、中身は。

使い方もほぼ同じでアクション内で


// 同期トークン保存
$this->saveToken();


でトークンを保存して


// 同期トークンチェック
if (!$this->isTokenValid($request, true)) {
    // エラー処理
}


で同期トークンの妥当性をチェックします。

ビュー側の ViewScript にもトークン値を埋めて置かなければいけないのですがこの辺はフレームワークチックに


<?php echo $html->form("/regist") ?>


と記述しておくとクライアントには


<form action="/regist" method="post"><input type="hidden" name="TRANSACTION_TOKEN_VALUE" value="9a2241c2015fb98771d97a9828db1d73" />


が出力されます。

ブラウザの戻るや二重送信対策にはこの同期トークンの仕組みは便利ですよね。

InnoFrame Website
http://innoframe-php.net/