ページ遷移、クッキー、セッション (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>
※関連コンテンツ