概要と目標
受け取ったデータを、
引き継ぎ出来るようになろう。
ユーザーが送信したデータは、受け取ったそのページでしか使えない。
ユーザーが送信したデータを他のページにも引き継ぎ出来るようになりましょう。
ユーザーが送信したデータは、受け取ったそのページでしか使えない。
ユーザーが送信したデータを他のページにも引き継ぎ出来るようになりましょう。
別ページにジャンプさせる場合は、header関数を使用する。
このheader関数は、リダイレクトするための関数ではなく、HTTPヘッダを送信する為の関数。
なお、全ての画面出力より先に記述する必要がある。
また、リダイレクト処理の後は exit関数 を使って、その後の処理を終了しておくとよい。
header関数 ・・・ クッキーに情報を保存する関数header(ヘッダ文字列)
ヘッダ文字列:リダイレクトの場合は、「'Location: URL'」の形式で記述する。
詳細はPHPマニュアルを参照
exit関数 ・・・ 処理を終了する関数exit(終了時のメッセージ)
省略可
詳細はPHPマニュアルを参照
<?php
// jump.htmlにリダイレクト
header('Location: jump.html');
// 処理の終了
exit();
?>
HTTPはリクエストとレスポンスから成り立っている。
WEBサーバでは状態を管理することは出来ない。
HTTPはリクエストとレスポンス。
1回目のリクエスト
1回目のレスポンス
2回目のリクエスト
2回目のレスポンス
複数のリクエスト間で情報を引き継ぐ方法は、以下の方法などがある。
input要素のhiddenフィールドに引き継ぎたい情報を付ける
クッキーとは、サーバー側で引き継ぎたい情報を
クライアント側(ブラウザ)で保存する仕組みのこと。
会員証のようなもの。
HTTPはリクエストとレスポンス。
1回目のリクエスト
1回目のレスポンス
2回目のリクエスト
2回目のレスポンス
setcookie関数で保存。
クッキーは、setcookie関数を用いて保存や削除を行う。setcookie関数は、全ての画面出力より先に記述する必要がある。
setcookie関数 ・・・ クッキーに情報を保存する関数setcookie(クッキー名, 保存する値, 有効期限)
省略可
有効期限は、1970年1月1日からの経過ミリ秒で指定。省略した場合は、ブラウザを閉じるまでになる。
過去の日付にすると即削除できる。
詳細はPHPマニュアルを参照
time関数 ・・・ 1970年
1月1日からの経過ミリ秒返す関数time()
詳細はPHPマニュアルを参照
h1要素の下に、入力フォームを作成
<form action="receive.php" method="post">
<dl>
<dt><label for="name">ユーザー名</label></dt>
<dd>
<input type="text" name="name" id="name">
</dd>
<dt><label for="password">パスワード</label></dt>
<dd>
<input type="password" name="password" id="password">
</dd>
</dl>
<p><label><input type="checkbox" name="save" value="on" checked> ユーザー名を保存する</label></p>
<p><input type="submit" value="ログイン"></p>
</form>
<?php
// クッキーの保存と削除
if ( isset($_POST['save']) && $_POST['save'] == 'on' ) {
// クッキーの name に $_POST['name'] の値を 14日間保存
setcookie('name', $_POST['name'], time() + 60 * 60 * 24 * 14); // 14日間(60秒 * 60分 * 24時間 * 14日)
$msg = 'ユーザ名を保存しました。';
} else {
// クッキーの name の 値を削除 ・・・ 有効期限を過去にする
setcookie('name', '', time() - 3600);
$msg = 'ユーザ名を保存しませんでした。';
}
?>
h1要素の下に、メッセージを出力<p><?php echo $msg; ?></p>
クッキーの読み込みはスーパーグローバル変数の $_COOKIE を用いる。
$_COOKIE ・・・ クッキーにアクセスするスーパーグローバル変数$_COOKIE[クッキー名]
<?php
$name = ''; // ユーザー名の初期値
if ( isset($_COOKIE['name']) ) {
// クッキーにユーザー名が保存されていれば変数を上書き
$name = $_COOKIE['name'];
}
?>
input要素に、value属性で初期値を追加
<form action="receive.php" method="post">
<dl>
<dt><label for="name">ユーザー名</label></dt>
<dd>
<input type="text" name="name" id="name" value="<?php echo htmlspecialchars($name, ENT_QUOTES, 'UTF-8');?>">
</dd>
<dt><label for="password">パスワード</label></dt>
<dd>
<input type="password" name="password" id="password">
</dd>
</dl>
<p><label><input type="checkbox" name="save" value="on" checked> ユーザー名を保存する</label></p>
<p><input type="submit" value="ログイン"></p>
</form>
setcookie関数の第4引数以降にはセキュリティに関数する引数があります。
setcookie関数 ・・・ クッキーに情報を保存する関数setcookie(クッキー名, 保存する値, 有効期限, ディレクトリ, ドメイン, セキュア接続のみ, HTTPのみの接続)
省略可
詳細はPHPマニュアルを参照
// dummy.com の php-lessonss ディレクト配下にSSL接続のみ有効。(JavaScriptなどからのアクセス不可)
setcookie('name', $_POST['name'], time() + 60 * 60 * 24 * 14, '/php-lessons/', 'dummy.com', true, true);
引き継ぎたい情報を、サーバー側で保存する仕組み。
HTTPはリクエストとレスポンス。
1回目のリクエスト
1回目のレスポンス
2回目のリクエスト
2回目のレスポンス
セッションを利用する全てのページは、session_start関数でセッションを開始する。session_start関数は、全ての出力に関する記述より先に記述する必要がある。
session_start関数 ・・・ セッションを開始する関数session_start()
詳細はPHPマニュアルを参照
h1要素の下に、入力フォームを作成
<form action="receive.php" method="post">
<dl>
<dt><label for="name">ユーザー名</label></dt>
<dd>
<input type="text" name="name" id="name">
</dd>
<dt><label for="password">パスワード</label></dt>
<dd>
<input type="password" name="password" id="password">
</dd>
</dl>
<p><input type="submit" value="ログイン"></p>
</form>
<?php
// セッションの開始
session_start();
?>
セッションの読み書きはスーパーグローバル変数の $_SESSION を用いる。
$_SESSION ・・・ セッションにアクセスするスーパーグローバル変数$_SESSION[キー]
<?php
// セッションの開始
session_start();
// ログインユーザーを変数で管理
$name = 'dummy'; // お好きなユーザー名に変更
$password = 'dummy'; // お好きなパスワードに変更
?>
?>の手前で、ログインのチェックを行い、ログインに成功したらセッションにユーザー名を保存
<?php
// セッションの開始
session_start();
// ログインユーザーを変数で管理
$name = 'dummy'; // お好きなユーザー名に変更
$password = 'dummy'; // お好きなパスワードに変更
// ログインに成功したらセッションに保存
if ( $_POST['name'] == $name && $_POST['password'] == $password ) {
// セッションにユーザ名を格納
$_SESSION['name'] = $_POST['name'];
$msg = 'ようこそ' . $_SESSION['name'] . 'さん';
} else {
// ログイン失敗
$msg = 'ログイン出来ませんでした。';
}
?>
h1要素の下に、メッセージを出力
<p><?php echo htmlspecialchars($msg, ENT_QUOTES, 'UTF-8'); ?></p>
セッションは、他のページからもそのセッションに保存されたデータを利用することが出来る。
<?php
// セッションの開始
session_start();
// ログインチェック
if ( !isset($_SESSION['name']) || empty($_SESSION['name']) ) {
// ログインしていない
// ログインフォームへリダイレクト
header('Location: ./');
exit;
}
?>
h2要素の下に、セッションの中身を表示
<dl>
<dt>ユーザー名</dt>
<dd>
<?php echo htmlspecialchars($_SESSION['name'], ENT_QUOTES, 'UTF-8'); ?>
</dd>
</dl>
セッションの破棄は session_destroy関数 を用いる。
ただし、$_SESSIONのデータや、クッキにー保存されているセッションIDは、
削除されないので予め削除しておく必要がある。
なお、セッションIDが保存されている、クッキーの部屋名は、session_name関数で知ることができる。
session_destroy関数 ・・・ セッションを破棄する関数session_destroy()
詳細はPHPマニュアルを参照
session_name関数 ・・・ セッション名を取得・設定する関数session_name(設定するセッション名)
省略可
詳細はPHPマニュアルを参照
<?php
// セッションの開始
session_start();
// セッションの初期化で、値を削除
$_SESSION = array();
// クッキーのセッションIDを削除
setcookie(session_name(), '', time() - 3600);
// セッションの破壊
session_destroy();
header('Location: ./');
exit();
?>
「training」フォルダ内の「index.php」と「reset.php」を開き
<?php
// セッションの開始
session_start();
// カウンターの初期値
$counter = 0;
if ( isset($_SESSION['count']) ) {
// セッションに データがあれば セッションのデータを代入
$counter = $_SESSION['count'];
}
// カウンターのカウントアップ
$counter++;
// セッションに保存
$_SESSION['count'] = $counter;
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>練習問題7</title>
</head>
<body>
<h1>アクセスカウンタ</h1>
<p>あなたはこのページを <?php echo htmlspecialchars($counter, ENT_QUOTES, 'UTF-8'); ?>回見ています。</p>
<p><a href="reset.php">カウンターのリセット</a></p>