質問: ### 前提・実現したいこと 来場特典の申請フォームのページを作っています。 入力画面と完了画面という単純な構造です。 一度申請完了画面までたどり着いたユーザーは、 入力ページにアクセスしても自動的に完了ページに飛ばすようにしたいです。 会員制サイトではないのでログイン情報では判別できません。 下記のようにすればいいのではと考えたのですがこれを実現させる手段がわからない状態です。 1. 完了画面にアクセスすると何かしらの情報を持たせる 2. その情報を持っているかで入力画面アクセス時に条件分岐させる 実現方法やさらにいい案がございましたらご教授頂けますと幸いです。 ### 補足 来場特典について イベント予約サイトで予約をした人にイベント毎に異なる特典申請ページのURLと受付番号を送信しています。 予約時には名前とメールドレスを入力頂きます。(イベント情報は自動入力) 特典申請ページにアクセスするには会場にいかないとわからないパスワードが必要になります。 申請フォームで受付番号を送っていただき、 予約情報と照合して予約時のメールアドレスにアマゾンギフトを送るというものです。
回答: まずその「来場特典」というのは一体どのようなものでしょうか?例えば抽選で金券が当たるといったものであれば、「投稿は何度でもできるが、送付先住所につき1件しか認めない」とすればそもそも投稿を制限する必要がないです。他にも来場者に「トークン番号」を渡して、フォームで入力してもらう形にしてもらえば、同一トークンからの投稿を弾く等の対策も可能です(トークン番号は連番だと推測可能なので、ランダムな文字列にすること。もちろんサーバ側でそのトークンが正当なものかのチェックと消費済判定が必要)。 なんにせよ、Webだけで「同一人物の多重投稿をできるだけ防ぐ」のは「お守り程度」のガードは可能ですが、「絶対に防ぐ」となるとログイン等の認証がない限り不可能です。Cookieを使うやり方でもブラウザ側でCookieを消してしまえば再投稿可能ですし、Sessionもセッション情報をブラウザ側で消すことができるので再投稿可能です。 ### 追記 言ってしまえば「ログイン認証」を作ったとしても同一人物の再投稿を防ぐことは不可能です。なぜなら「ログイン認証に使う情報が本当に一人の人間に一つしかない保証がない」からです。最近ではメールアドレスなんてgmailアカウントを作るだけでいくらでも得られます。同一人物がたくさんメールアドレスを持っていたら、メールアドレスによるログイン認証ですら多重投稿を許してしまいます。同一人物の保証ができるとしたら、しいてあげるとすればマイナンバーでしょうか。送付先住所も厳密には一つに絞ることができません。例えば私書箱を指定されたり、住所の番地を漢字や数字で使い分けるとサーバ側で同一判定が漏れてしまいます。 ということで、考えてみたところ、一番有効な「一人一投稿まで」とできるのはトークンを印刷した紙を渡すことでしょう。まあこれもそのトークンを会場を出入りして何度も受け取ることが出来たら意味がないのですが...