Tokenの説明

フォームで何か処理を完了したページで、リロード(再読込)などがおこなわれると、二重に登録してしまったりする事を防ぐための物。

たとえば、登録フォームで、確認画面の次に、完了画面へ映るとします。 その際(完了画面表示時)に、DBなどへの追加処理が発生します。この完了画面で、リロードされてしまうと、何もしていない状態だと、同じデータ(レコード)がもう一度追加されることになり、あまりよろしくない。

そういったことを防ぐものです。

実装

MapleではTokenとしてこの機能が実装されていますので、ルールに従い、記述をおこなえば簡単にできます。

確認画面

完了画面の一つ前、通常であれば確認画面を出力するActionのところの、maple.iniを編集します。

maple.ini

....
[Session]
....

[Token]
mode = build
name = sampleToken
....

[Session]の下あたりに、[Token]を追加します。
書き方は、上記の通りで、nameは適当につけてください。

HTMLソース

<input type="hidden" name="{token->getName}" value="{token->getValue}" />

この1行を、<form>〜</form>内のどこかへ記述します。

完了画面

ここで、実際にリロードがおこなわれたかのチェックを行い、リロードされていた場合は、[View]で指定した画面を表示するようになります。
完了時のActionのmaple.iniは以下のようになります。

maple.ini

....
[Session]
....

[Token]
mode = check,remove
name = sampleToken
....
[View]
....
invalidToken = token_error.html

当然、[Token]のnameを確認画面の物と同じにしなければなりません。
また、[View]のinvalidTokeで、リロードがおこなわれた際の、表示ページを指定します。