libro
www.tuyano.com
初心者のためのPHPプログラミング入門

ページ遷移、クッキー、セッション (4/8)

作成:2010-12-09 09:26
更新:2010-12-09 09:26

■クッキーを利用してみる

では、これもサンプルをあげておきましょう。下のリストは、入力フィールドに書いたテキストをクッキーに保存する例です。適当に書いて送信してみましょう。クッキー情報に、保存したクッキーの内容が表示されます。

ここでは、クッキーの保存と読み込みをそれぞれ別の<?php ?>タグに書いてあります。以下の部分がクッキー操作をしているところになります。
setcookie("mycookie",htmlspecialchars($str),time() + 60 * 10);
第3引数では、time関数で現在のタイムスタンプを取得し、それに10分の秒数を足しています。つまり、「10分後に破棄する」ように設定していたわけです。そしてクッキーの読み込みは、
$cookie = $_COOKIE['mycookie'];
このようにして行っています。これでクッキーの値が読み込まれます。もし、そのクッキーが既に破棄されていた場合には、値はnullになるので注意しましょう。

さて、クッキーを利用する場合には、1つ注意すべき点があります。それは「setcookieした段階では、クッキーはまだ保存されていない」という点です。

クッキーも、実はHTTPヘッダーを使ってやり取りされています。setcookieは、実は「ヘッダーに、クッキー保存の記述を追加する」ものだったのです。ですから、これもheader関数と同様に、まだヘッダーが出力されてないときに呼び出してやらないといけません。ヘッダーが送信された後にsetcookieを実行しても、クッキーは保存できないのです。

setcookieでヘッダーにクッキー情報が追加されると、それがブラウザに送られ、ブラウザ側で読み込まれる際にクッキーが作成保存されます。そして、次にそのサイトのページにアクセスすると、その際にブラウザのクッキー情報がWebサーバーに送られ、そこで$_COOKIEに格納されて値が得られるようになる、というわけです。

つまり、secookieを実行したときにはクッキーはまだ存在せず、次にアクセスした時から得られる。クッキーの値を変更する場合も同様に次から値が変わる、というように「1アクセス分、ずれる」のです。

このサンプルコードをよく見てください。setcookieした後、header関数を使って自分自身にページ移動しているのがわかるでしょう。こうすることで、クッキーを保存したらページに再アクセスしてクッキーがすぐに使えるようにしていたのです。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

<?php
	if ($_POST != null){
		$str = $_POST['text1'];
		setcookie("mycookie",htmlspecialchars($str),time() + 60 * 1);
		header("Location: ./index.php");
	}
?>
<!DOCTYPE html
	PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"
		xml:lang="ja" lang="ja"> 
	<head> 
		<meta http-equiv="Content-Type"
			content="text/html; charset=UTF-8" /> 
		<title>sample page</title>
	</head>
	<body>
		<h1>Hello PHP!</h1>
		<p>
			<?php
				$cookie = $_COOKIE['mycookie'];
				echo "クッキー情報:{$cookie}";
			?>
		</p>
		<hr>
		<form method="post" action="./index.php">
			<input type="text" name="text1">
			<input type="submit" value="移動">
		</form>
		<hr>
	</body>
</html>

※関連コンテンツ

「初心者のためのPHPプログラミング入門」に戻る