ここは以前の ethna.jp サイトを表示したものです。ここにあるドキュメントはバージョン2.6以降更新されません。
最新のドキュメントは 現在のethna.jp を閲覧してください。現ドキュメントが整備されるまでは、ここを閲覧してください。
Ethna > ドキュメント > 開発マニュアル > ethna-document-dev_guide-app > 二重POSTを防止する

二重POSTを防止する

(1) 登録画面の前のページ(確認画面等)にユニークIDを仕込む

ethnaには二重POSTのチェック用のユニークIDを出力するSmartyプラグイン {uniqid} が用意されています。 以下のように確認画面(ない場合は登録画面) のテンプレートにユニークIDを仕込みます。

POSTの場合(hidden)

<form method=POST action=index.php>
<input type="hidden" name="action_user_regist_do" value="1">
 {uniqid}
 :
 :
</form>

{uniqid} の部分には以下のようなhiddenタグが出力されます。

<input type="hidden" name="uniqid" value="a0f24f75e...e48864d3e">

GET の場合

<a href="?action_user_regist_do=1&...&{uniqid type=get}">登録</a>

(2) 登録処理の Action で二重POSTをチェックする

Ethna_Util::isDuplicatePost() の返り値が true の場合二重POSTです。 それ以降の処理をスキップして return します。

	function perform()
	{
           if (Ethna_Util::isDuplicatePost()) {
              // 二重POSTの場合
              return 'regist_done';
           }

           // 登録処理
                :
                :
           return 'regist_done';
	}

(捕捉) 動作原理

Ethna_Util::isDuplicatePost() が呼ばれると、project_root/tmp/ から
uniqid_{REMOTE_ADDR}_{uniqid} というファイルを探します。
そのファイルが既に存在する場合は二重POSTとみなし true を返し、ない場合は作成します。
リクエストに uniqid というパラメータがない場合は 常に falseを返します。
一時ファイルは1時間で削除されます。