二重投稿の禁止

二重投稿の禁止

今回は「トークン判定方式」で二重投稿を回避する仕組みについて学びましょう。 トークン判定とは何でしょうか?

ブラウザ側とプログラム側に照合番号を与え、送信時に合っている場合だけ、処理を実行します。処理が実行できた後は、サーバーが新しい「照合番号」を再発行します。

 

二重投稿の禁止

トークン判定方式

F5で二重送信・重複送信される現象を防止

セッションを利用する

 

【参照】

PHPブラウザ更新(F5)で二重送信・重複送信される現象を防止する

 

 

セッションを利用する

まずは、セッションを利用します。

セッションは、サーバーとPCの両方に、文字列などを残せます。ちなみに、クッキーはパソコン側だけに文字列を残せます。

 

■ input.php ... 入力画面など
<?php
// セッションを開始する
session_start();

// ワンタイムチケットを生成する。
$ticket = md5(uniqid(rand(), true));

// 生成したチケットをセッション変数へ保存する。
$_SESSION['ticket'] = $ticket;
?>
<html>
<head>
<title>サンプル登録画面</title>
</head>
<body>
<form action="regist.php" method="POST">
<input type="text" name="UserName" value="">
<input type="submit" value="regist">
<!-- 生成したワンタイムチケットを隠しフィールドとして、
登録処理へPOSTする -->
<input type="hidden" name="ticket" value="<?=$ticket?>">
</form>
</body>
</html>

 

 

 

■ regist.php ... 登録処理など
<?php
// セッションを開始する
session_start();

// ポストされたワンタイムチケットを取得する。
$ticket = isset($_POST['ticket']) ? $_POST['ticket'] : '';

// セッション変数に保存されたワンタイムチケットを取得する。
$save = isset($_SESSION['ticket']) ? $_SESSION['ticket'] : '';

// セッション変数を解放し、ブラウザの戻るボタンで戻った場合に備え
// る。
unset($_SESSION['ticket']);

// ポストされたワンタイムチケットの中身が空だった、または、ポス
// トすらされてこなかった場合、不正なアクセスとみなして強制終了す
// る。
if ($ticket === '') {

die('不正なアクセスです');

}

// ポストされたワンタイムチケットとセッション変数から取得したワン
// タイムチケットが同じ場合、正常にポストされたとみなして処理を行
// う。
if ($ticket === $save) {

echo 'Normal Access';

}
// ブラウザの戻るボタンで戻った場合は、セッション変数が存在しない
// ため、2重送信とみなすことができる。
// また、不正なアクセスの場合もワンタイムチケットが同じになる確率
// は低いため、不正アクセス防止にもなる。
else {

echo 'Dual Posted';

}
?>

 

 

説明

1.セッションを使いえるようにする

session_start();

 

これで利用できるようになります。これを書かないとスーパーグローバル変数である、$_SESSIONが使えません。

 

2.新しいトークンを発行できるようにする。

 

$ticket = md5(uniqid(rand(), true));

// 生成したチケットをセッション変数へ保存する。
$_SESSION['ticket'] = $ticket;
?>

 

md5()関数を使って変数を作り、$ticket に格納します。

さらに、$_SESSION['ticket'] に保存します。これで、暗号化した値を$_SESSION['ticket'] に保存できました。

 

二重投稿を防ぐには??>>

 

random_int()関数の利用

ランダムな整数を作り出します。php7.0から使えるようになっています。

暗号学的にいうと、random_int()を利用した方が「mt_rand() 」を利用するより安全です。

 

random_int();

 

一応、mt_rand() も説明しておきます。

mt_rand() ;

 

利用すると、以下のような文字列が発行されます。

 

1604716014

 

【参照】

random_int()関数について>>

 

 

フォーム部分

ユーザーが送る前に、照合番号をセットします。

 

<form action="" method="post" enctype="multipart/form-data">
<input name="chkno" type="hidden" value="<?php echo $chkno; ?>">

 

非表示のデータで、毎回変わる照合番号を表示させます。 hidden要素にして、見えないようにします。

 

こうする事で、ブラウザからの送信時に、照合番号が送られるようになります

 

 

PHPの勉強方法

目安は1日3~5時間の勉強で100日程度です。実際にやってみましたが、仕事をしながらだと、200日ほどかかります。

 

なぜなら、休日の家族サービス。モチベーションの低下などがあるからです。

前置きはさておき、まずは勉強方法です。

 

 

PHPを学ぶには、独自の言葉を覚える必要があります。「・」が付いているものは、外部のサイトへ飛びます。

 

■ 基本編 ■

PHPとは?

設定方法

PDOとは何か?

mysql_connect()

postを使ってみよう

コンストラクタとは?

-> アロー演算子とは?

データベースへのアクセスについて

セッションとは

ファイルのアップローダー

CSRF対策

二重投稿の禁止

ハッシュ値とは?

 

■ DBへの接続■

管理者権限について

PDOについて知ろう

PDOを使ってMYSQLに接続しよう

 

■ フレームワーク ■

フレームワークは何を使ったらいいのか?

ララベルとは?

コードイグナイターとは?

オートロードとは

無名関数とは?

MVCとは何か?

 

■ オブジェクト指向■

クラス・インスタンス・プロパティ

オブジェクト指向とは?

 

 

 

【フレームワーク】

基本的には、ララベルを学ぶ方がよい。 ララベルはコンポーザー

 

 

MYSQLについて

MYSQLの学習方法について。DBの操作方法を覚えます。 四大操作をまずは覚えておきましょう。

 

■ 基本編 ■

MYSQLとは?

CURDについて

更新について

削除について

アップデートについて

 

フェッチするとは?

 

■ 設計について■

UMLとは何か?

ER図を覚えよう

 

 

 

 

コードイグナイターの勉強方法

 

コードイグナイターを学んでいきましょう。「・」が付いているものは、外部のサイトへ飛びます。

 

DB設定 ⇒ 接続 ⇒ SQLクエリ ⇒ DB暮クラスの機能 ⇒ 結果の取得 の順に学ぶとよい。

http://www.ci-guide.info/db/

 

SQLのクエリ発行には2種類がある。通常方法と、「Acive Record」の2種類です。

 

■ フレームワーク ■

フレームワークは何を使ったらいいのか?

ララベルとは?

コードイグナイターとは?

オートロードとは

無名関数とは?

MVCとは何か?

 

 

【参照】

http://www.ci-guide.info/

http://pneskin2.nekoget.com/codeigniter/3/user_guide/index.html

どちらかを見ましょう。

 

【フレームワーク】

基本的には、ララベルを学ぶ方がよい。 ララベルはコンポーザーが入っている。

 

 

勉強に必要な書籍について

必ず、最新のverを買うようにしてください。PHPはバージョンによって、かなり違います。PHP、MYSQL、、サーバー、フレームワークと幅広く勉強する必要があります。

 

本はかならず、2冊用意するようにしましょう。1冊は基本、もう1冊は分からない部分を補完してくれます。

ちなみに、無名関数、コールバック関数などは、何度勉強してもつまずく可能性があります。

 

PHPサーバーサイドプログラミング

基本から詳しく書いてあるが、ところどころ、省略されていて分かりずらい。

パーフェクトPHP

ある程度、分かってから使うとよい

基礎からのMYSQL

基本から全てが分かります。

PDOでのアクセスを学ぶのによい。

LINUXコマンド入門

サーバー、ファイル権限を学ぶのに良い。

サーバーはlinuxベースで出来ているので、ここが分かると、かなり分かる。

プログラムはなぜ動くのか?

パソコンが動く、原理と基本がわかります

ここが分かると、配列、ポインタなどが分かります

体型的に学ぶ完全なwebアプリケーションの作り方

XSSなどの基本的なセキュリティー対策が分かります。

 

【MYSQLについて】

データベースについて学びます。「SELECT」を極めましょう。型の指定方法などが学べます。

 

基礎からのMYSQL

基本から全てが分かります。

PDOでのアクセスを学ぶのによい。

達人に学ぶdb設計 徹底指南書

基本が終わったら、必ず読みましょう。

 

【サーバーについて】

サーバー、ファイル権限について学びます。

 

LINUXコマンド入門

サーバー、ファイル権限を学ぶのに良い。

サーバーはlinuxベースで出来ているので、ここが分かると、かなり分かる。

 

【DB設計について】

DBの設計方法について学ぶことができます。

 

楽々ERDレッスン

DBの設計に必要

UML入門

基本について学んでおくとよい

 

 

参照サイト

オブジェクト指向とは?

PDOとは何か?

mysql_connect()

アロー演算子とは?

データベースへのアクセスについて

 

大変申し訳ありませんが、当社ではサービスの質を落とさないために、月の契約は5件までとさせていただいております。 契約をお待ちいただく可能性もございますので、ご了承のほどよろしくお願いいたします

 

 

 

 

この記事を読んだ人は、こんな記事も読んでいます

 

SEO対策の基本 外部要因とは?

SEO対策の基本的である、外部要因とは何か?

SEO対策をするなら絶対に知っておきたい、基本知識です。

 

売れるサイトを作るのに知って起きたい知識

サーチエンジンマーケティングという言葉をご存知でしょうか?

ホームページで商品やサービスを売る時に知っておきたいマーケティング

についてご紹介いたします。

seo対策をするメリットとは

SEO対策をする5つのメリットとは?

なぜ上位表示させることが大事なのか?なぜSEO対策をする必要があるのか

についてご紹介させていただきます。

 

内部要因とは

SEO対策の内部要因とは?

上位表示させるためには、内部要因について知っておくことも大事です。

キーワードを上位表示させるために必要なのは、ソースコードを最適化することです

内部要因の対策について知りたい方はこちらへ

 

キーワード対策をするまえに

キーワード対策をする前に

そのキーワード対策。ちょっと待ってください。

そのまま対策をすると、必ずお金を損してしまいます。個人事業主や中小企業は

そんな大きなキーワードで対策をしてはいけません。

広告費用が高くなる理由とは

広告費用が高くなる本当の理由とは?

売れないサイトに集めていませんか?広告費用がかかるわりには

お問い合わせが少ない・・・と感じる方は多いはずです。

購入率の悪いサイトに集客をしている可能性があります。

 

 

 

 

【SEO対策・web広告・webコンサルティングのプラスワーク対応エリアについて】

プラスワークでは、東京、神奈川、千葉、埼玉を中心に全国でwebコンサルティング、SEO対策、ホームページの更新、ホームページのリニューアル運営代行をしております。売上アップをお考えならお気軽にご相談ください。

 

【SEO対策・web広告・webコンサルティングのプラスワーク 対応地域】

北海道 [ 北海道 ]

東北  [ 青森 | 岩手 | 山形 | 福島 | 秋田 | 宮城 ]

関東  [ 東京 | 埼玉 | 千葉 | 茨城 | 栃木 | 群馬 | 神奈川 ]

甲信越 [ 山梨 | 長野 | 新潟 ]

北陸  [ 石川 | 福井 | 富山 ]

東海  [ 愛知 | 静岡 | 岐阜 | 三重 ]

近畿  [ 大阪 | 兵庫 | 京都 | 滋賀 | 奈良 | 和歌山 ]

中国  [ 島根 | 山口 |鳥取 | 広島 | 岡山 ]

四国  [ 徳島 | 香川 | 愛媛 | 高知 ]

九州  [ 福岡 | 佐賀 | 長崎 | 熊本 | 大分 | 宮崎 | 鹿児島 ]

プラスワークでは全国でSEO対策、ホームページ更新、制作をしております。中小企業専門SEO対策・ホームページ更新制作会社、ダイレクト レスポンス マーケティング、ウェブ マーケティング、マーケティング 分析、口コミのよいSEO対策会社をお探しならプラスワークにお任せくださいませ。

 

 

【コンテンツ】

トップへ

更新レスキュー

料金について

制作実績

お客様の声

よくある質問

会社概要

お問い合わせ

【更新レスキュー】

ライトコース

ゴールドコース

プラチナコース

 

【その他】

ニュース

メルマガ登録

特別資料プレゼント

相互リンク募集中

【課題から探す】

ホームページの課題

SEO対策とは

SEO対策がダメな理由

上位表示されない理由

相互リンクとは

順位が落ちてしまう原因

 

 

フェイスブック  ツイッター