meideru blog

家電メーカーで働いているmeideruのブログです。主に技術系・ガジェット系の話を書いています。

PHPにおけるクッキー(cookie)とセッション(session)のまとめ

      2016/08/03

Web開発の勉強なうです・ω・

今日は、PHPのクッキー(cookie)とセッション(session)の勉強をしました。

備忘録の意味も兼ねて、忘れないように記事に書いておこうと思います。

クッキー(cookie)について

クッキー(cookie)とは、クライアント(ブラウザ)側にデータを保存する技術です。そのデータをサーバ側が、クライアント側に保存したり、参照したりすることができます。

また、クライアント側に保存したクッキーの情報は有効期限を設定することによって、指定した時間を迎えると自動的に削除されるように設定することができます。(有効期限を設定しない場合は、ブラウザを終了すると自動的に削除されます。)

 

サンプルプログラムを書いてみましょう。

<?php
$count = 1;
// キーが存在するとき
if(isset($_COOKIE["count"]))
{
    $count = $_COOKIE["count"];
    $count++;
}
// キーをセットする(有効期限は30秒)
setcookie("count", $count, time() + 30);
?>

<html><head>
<meta http-equiv="Content-Type" content="text/html;
charset=utf-8">
</head>
<body>
クッキーのテスト<br>
<br>

<?php
if($count == 1)
{
?>
あなたは初めての訪問です。<br>
<br>
このページを再読み込みしてみてください。<br>

<?php
}
else
{
?>

あなたの訪問回数は<?=$count?>回です。<br>
<br>
30秒以内に再読み込みすると、カウントアップされます。

<?php
}
?>

</body>
</html>

このソースコードはブラウザで再読み込みすると、数値がカウントアップされます。ただし、クッキーの有効期限をが30秒に設定してあるので、それ以内に再読み込みしなければいけません。

セッション(session)について

セッション(session)とは、大雑把に説明すると、ページをまたいでもデータを維持できる技術です。これを実現するために、クッキーの技術が使われています。

サーバ側はクライアント側(ブラウザ)が保持する固有のセッションIDを元に、サーバに保存されているデータを参照することができます。このようにしてページをまたいでもデータを維持することができます。

サーバ側に保存されているデータは、ガベージコレクションという技術を用いて管理されていて、あるタイミングで削除されます。

クライアント側に保存されているセッションIDはクッキーを用いて保存されています。デフォルトの状態だと有効期限は設定されていないので、ブラウザを閉じるとセッションIDは消えます。

 

セッションを開始するには、session_start関数を呼び出します。この関数を呼び出すと、2通りの場合の手続きが行われます。

その1.  初めてのセッションのとき

session_start関数が初めて呼び出されると、サーバはセッションIDを発行します。このセッションIDをクライアント側(ブラウザ)にクッキーを用いて、保存します。

その2. セッションが2回目以降のとき

2回目以降のセッションでは、クライアント側がサーバ側にセッションIDを送信します。セッションIDを受け取ったサーバは、それを元にしてサーバに保存されているデータを参照することができます。

 

以下にサンプルプログラムを書きます。

<?php
// セッションを開始する
session_start();

$count = 1;
// キーが存在するとき
if(isset($_SESSION["count"]))
{
    $count = $_SESSION["count"];
    $count++;
}
$_SESSION["count"] = $count;
?>

<html><head>
<meta http-equiv="Content-Type" content="text/html;
charset=utf8">
</head>
<body>
セッションのテスト<br>
<br>
<?php
if($count == 1)
{
?>
あなたは初めての訪問です。<br>
<br>
セッション変数にはデータがありません。<br>
このページをリロードしてください。<br>

<?php
}
else
{
?>

あなたの訪問回数は<?=$count?>回です。

<?php
}
?>

</body>
</html>

ブラウザを閉じると、カウントがリセットされるはずです。これは、セッションIDがブラウザのクッキーから削除されるからです。

 

以上です!

ノシ

PS
サンプルプログラムのソースは十分にデバッグしていません。なので、間違っている恐れがあります。間違っていたら教えて下さい・・・。

 - 技術系