ページ遷移、クッキー、セッション (4/8)
作成:2010-12-09 09:26
更新:2010-12-09 09:26
更新:2010-12-09 09:26
■クッキーを利用してみる
では、これもサンプルをあげておきましょう。下のリストは、入力フィールドに書いたテキストをクッキーに保存する例です。適当に書いて送信してみましょう。クッキー情報に、保存したクッキーの内容が表示されます。
ここでは、クッキーの保存と読み込みをそれぞれ別の<?php ?>タグに書いてあります。以下の部分がクッキー操作をしているところになります。
さて、クッキーを利用する場合には、1つ注意すべき点があります。それは「setcookieした段階では、クッキーはまだ保存されていない」という点です。
クッキーも、実はHTTPのヘッダーを使ってやり取りされています。setcookieは、実は「ヘッダーに、クッキー保存の記述を追加する」ものだったのです。ですから、これもheader関数と同様に、まだヘッダーが出力されてないときに呼び出してやらないといけません。ヘッダーが送信された後にsetcookieを実行しても、クッキーは保存できないのです。
setcookieでヘッダーにクッキー情報が追加されると、それがブラウザに送られ、ブラウザ側で読み込まれる際にクッキーが作成保存されます。そして、次にそのサイトのページにアクセスすると、その際にブラウザのクッキー情報がWebサーバーに送られ、そこで$_COOKIEに格納されて値が得られるようになる、というわけです。
つまり、secookieを実行したときにはクッキーはまだ存在せず、次にアクセスした時から得られる。クッキーの値を変更する場合も同様に次から値が変わる、というように「1アクセス分、ずれる」のです。
このサンプルコードをよく見てください。setcookieした後、header関数を使って自分自身にページ移動しているのがわかるでしょう。こうすることで、クッキーを保存したらページに再アクセスしてクッキーがすぐに使えるようにしていたのです。
ここでは、クッキーの保存と読み込みをそれぞれ別の<?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関数を使って自分自身にページ移動しているのがわかるでしょう。こうすることで、クッキーを保存したらページに再アクセスしてクッキーがすぐに使えるようにしていたのです。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
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>
※関連コンテンツ