二重投稿の禁止
二重投稿の禁止
今回は「トークン判定方式」で二重投稿を回避する仕組みについて学びましょう。 トークン判定とは何でしょうか?
ブラウザ側とプログラム側に照合番号を与え、送信時に合っている場合だけ、処理を実行します。処理が実行できた後は、サーバーが新しい「照合番号」を再発行します。
二重投稿の禁止トークン判定方式F5で二重送信・重複送信される現象を防止セッションを利用する |
【参照】
PHPブラウザ更新(F5)で二重送信・重複送信される現象を防止する
セッションを利用する
まずは、セッションを利用します。
セッションは、サーバーとPCの両方に、文字列などを残せます。ちなみに、クッキーはパソコン側だけに文字列を残せます。
■ input.php ... 入力画面など // ワンタイムチケットを生成する。 // 生成したチケットをセッション変数へ保存する。 |
■ regist.php ... 登録処理など // ポストされたワンタイムチケットを取得する。 // セッション変数に保存されたワンタイムチケットを取得する。 // セッション変数を解放し、ブラウザの戻るボタンで戻った場合に備え // ポストされたワンタイムチケットの中身が空だった、または、ポス die('不正なアクセスです'); } // ポストされたワンタイムチケットとセッション変数から取得したワン echo 'Normal Access'; } echo 'Dual Posted'; } |
説明
1.セッションを使いえるようにする
session_start(); |
これで利用できるようになります。これを書かないとスーパーグローバル変数である、$_SESSIONが使えません。
2.新しいトークンを発行できるようにする。
$ticket = md5(uniqid(rand(), true)); // 生成したチケットをセッション変数へ保存する。 |
md5()関数を使って変数を作り、$ticket に格納します。
さらに、$_SESSION['ticket'] に保存します。これで、暗号化した値を$_SESSION['ticket'] に保存できました。
random_int()関数の利用
ランダムな整数を作り出します。php7.0から使えるようになっています。
暗号学的にいうと、random_int()を利用した方が「mt_rand() 」を利用するより安全です。
random_int(); |
一応、mt_rand() も説明しておきます。
mt_rand() ; |
利用すると、以下のような文字列が発行されます。
1604716014 |
【参照】
フォーム部分
ユーザーが送る前に、照合番号をセットします。
<form action="" method="post" enctype="multipart/form-data"> |
非表示のデータで、毎回変わる照合番号を表示させます。 hidden要素にして、見えないようにします。
こうする事で、ブラウザからの送信時に、照合番号が送られるようになります
PHPの勉強方法
目安は1日3~5時間の勉強で100日程度です。実際にやってみましたが、仕事をしながらだと、200日ほどかかります。
なぜなら、休日の家族サービス。モチベーションの低下などがあるからです。
前置きはさておき、まずは勉強方法です。
PHPを学ぶには、独自の言葉を覚える必要があります。「・」が付いているものは、外部のサイトへ飛びます。
■ 基本編 ■
PHPとは?
設定方法
PDOとは何か?
mysql_connect()
-> アロー演算子とは?
データベースへのアクセスについて
■ DBへの接続■
PDOについて知ろう
■ フレームワーク ■
フレームワークは何を使ったらいいのか?
ララベルとは?
コードイグナイターとは?
オートロードとは
無名関数とは?
MVCとは何か?
■ オブジェクト指向■
クラス・インスタンス・プロパティ
オブジェクト指向とは?
【フレームワーク】
基本的には、ララベルを学ぶ方がよい。 ララベルはコンポーザー
MYSQLについて
MYSQLの学習方法について。DBの操作方法を覚えます。 四大操作をまずは覚えておきましょう。
■ 設計について■
UMLとは何か?
ER図を覚えよう
コードイグナイターの勉強方法
コードイグナイターを学んでいきましょう。「・」が付いているものは、外部のサイトへ飛びます。
DB設定 ⇒ 接続 ⇒ SQLクエリ ⇒ DB暮クラスの機能 ⇒ 結果の取得 の順に学ぶとよい。
SQLのクエリ発行には2種類がある。通常方法と、「Acive Record」の2種類です。
■ 基本編 ■
クエリ結果を作る
Active Recordとは?
クエリヘルパー関数
■ フレームワーク ■
フレームワークは何を使ったらいいのか?
ララベルとは?
コードイグナイターとは?
オートロードとは
無名関数とは?
MVCとは何か?
【参照】
http://pneskin2.nekoget.com/codeigniter/3/user_guide/index.html
どちらかを見ましょう。
【フレームワーク】
基本的には、ララベルを学ぶ方がよい。 ララベルはコンポーザーが入っている。
勉強に必要な書籍について
必ず、最新のverを買うようにしてください。PHPはバージョンによって、かなり違います。PHP、MYSQL、、サーバー、フレームワークと幅広く勉強する必要があります。
本はかならず、2冊用意するようにしましょう。1冊は基本、もう1冊は分からない部分を補完してくれます。
ちなみに、無名関数、コールバック関数などは、何度勉強してもつまずく可能性があります。
基本から詳しく書いてあるが、ところどころ、省略されていて分かりずらい。 |
|
ある程度、分かってから使うとよい |
|
基本から全てが分かります。 PDOでのアクセスを学ぶのによい。 |
|
サーバー、ファイル権限を学ぶのに良い。 サーバーはlinuxベースで出来ているので、ここが分かると、かなり分かる。 |
|
パソコンが動く、原理と基本がわかります ここが分かると、配列、ポインタなどが分かります |
|
XSSなどの基本的なセキュリティー対策が分かります。 |
【MYSQLについて】
データベースについて学びます。「SELECT」を極めましょう。型の指定方法などが学べます。
基本から全てが分かります。 PDOでのアクセスを学ぶのによい。 |
|
基本が終わったら、必ず読みましょう。 |
【サーバーについて】
サーバー、ファイル権限について学びます。
サーバー、ファイル権限を学ぶのに良い。 サーバーはlinuxベースで出来ているので、ここが分かると、かなり分かる。 |
【DB設計について】
DBの設計方法について学ぶことができます。
楽々ERDレッスン |
DBの設計に必要 |
UML入門 |
基本について学んでおくとよい |
参照サイト
大変申し訳ありませんが、当社ではサービスの質を落とさないために、月の契約は5件までとさせていただいております。 契約をお待ちいただく可能性もございますので、ご了承のほどよろしくお願いいたします
この記事を読んだ人は、こんな記事も読んでいます
SEO対策の基本 外部要因とは?
SEO対策の基本的である、外部要因とは何か?
SEO対策をするなら絶対に知っておきたい、基本知識です。
売れるサイトを作るのに知って起きたい知識
サーチエンジンマーケティングという言葉をご存知でしょうか?
ホームページで商品やサービスを売る時に知っておきたいマーケティング
についてご紹介いたします。
SEO対策をする5つのメリットとは?
なぜ上位表示させることが大事なのか?なぜSEO対策をする必要があるのか
についてご紹介させていただきます。
SEO対策の内部要因とは?
上位表示させるためには、内部要因について知っておくことも大事です。
キーワードを上位表示させるために必要なのは、ソースコードを最適化することです
内部要因の対策について知りたい方はこちらへ
キーワード対策をする前に
そのキーワード対策。ちょっと待ってください。
そのまま対策をすると、必ずお金を損してしまいます。個人事業主や中小企業は
そんな大きなキーワードで対策をしてはいけません。
広告費用が高くなる本当の理由とは?
売れないサイトに集めていませんか?広告費用がかかるわりには
お問い合わせが少ない・・・と感じる方は多いはずです。
購入率の悪いサイトに集客をしている可能性があります。