クッキーとセッションのちがい

インターネットショッピングを利用したことがある人は、ショッピングカートを思い出してください。買いたい商品を選んでショッピングカートに入れていきます。次のページにどんどん進んでいくとちゃんと商品が溜まっていきますよね。そして最後に合計料金が計算されます。これはウェブサーバーのプログラムがユーザの複数の操作を一連の手続きとして認識しているのです。
この一連の流れのことをセッションといいます 。もしセッションが正しく管理されていなければ、商品が溜まっていなかったり、別の人のカートに入ってしまったりして、買い物ができなくなってしまいます。ウェブページを表示するために用いられるhttpプロトコルは、クリックしてページを表示するという通信が基本となっています。ユーザの一連の操作を1セッションとみなすようになっていませんでしたそ。こでセッションを維持する ために考え出された仕組みがクッキーです。多くのブラウザで使われているため事実上の標準機能として利用できるものになっています。

httpプロトコルでは1回の要求と応答が1組の通信となります。これらの通信は独立したやりとりであり、過去に行った通信と関連がありません。このユーザが行う一連の通信のことをセッションといいます。
ショッピングカートやログイン認証等では、サーバーが過去の通信と同じユーザとやりとりしているか(セッションが同じであるか)を判断する仕組みが必要になります。そこでクッキーやセッション管理という方法を使います。

クッキーの発行

PHPでクッキーを発行するにはDOCTYPE宣言や<html.タグより前にsetcookie()関数を呼び出します。正常に発行されたらtrueを失敗したらfalseを返します。

<?php setcookie(‘val , 100);?>

valはクッキー名、100はクッキーの値を表しています。

第三引数に有効期限を設定すると、ブラウザが終了しても、期限がきれるまで値は保存されます。有効期限を設定しない場合は、ブラウザを終了すると、クッキーは無効になります。

<?php setcookie(‘val’ , 100 , time()+60);?>

有効期限を秒単位で指定します。上の場合、発行時刻より60秒有効という意味です。

クッキーの削除

必要のないクッキーは、有効期限を過去にして削除します。

setcookie( ‘val’ , ” ” , time( )-60);

クッキーの受け取り

ブラウザからサーバーに送られたクッキー情報は、次のようにグローバル変数 $_COOKIE で受け取ります。クッキー情報が送れなかったときは、下の$getvalはNULLになります。

$getval=$_COOKIE[ ‘ val ‘ ];

サンプルコード

cookie1.php

<?php setcookie('val',100);?>
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>cookie</title>
</head>
<body>
    <?php
    $getval=isset($_COOKIE['val'])? $_COOKIE['val']:"(なし)";
    print"ページ1の値は $getval です。";
    ?>
    <p><a href='cookie2.php'>ページ2へ</a></p>
</body>
</html>

cookie2.php

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <?php
    $getval=isset($_COOKIE['val']) ? $_COOKIE['val']:"(なし)";
    print"ページ2の値は $getval です。";
    ?>
    <p><a href='cookie1.php'>ページ1へ</a></p>
</body>
</html>

実行結果

セッション管理

DOCTYPE宣言や<html>タグより前にsession_start()関数を呼び出してセッションを開始します。セッションはPHPスクリプトの処理が終了するまで続きます。

<php session_start( ) ;?>

セッション変数の受け渡し

スーパーグローバル変数$_SESSIONに値を格納すると、同一のセッションで値を共有できます。このような変数をセッション変数と言います。

$_SESSION[‘bridge’]=100

クッキーでやりとりされるID情報のことをセッションクッキーといいます。

セッションのロック

セッションを開始すると、セッション情報はロックされてスクリプトが終了するまで、他のユーザから利用できなくなってしまいます。スクリプト実行中にセッションを終了し、ロックを解除するにはsession_write_close( )関数を使います。時間のかかるスクリプトの時はロックに気をつけましょう。

session_write_close( );

セッション情報の破棄

セッション管理を破棄するには、セッション変数やセッションクッキーを削除した後、session_destroy( )関数でセッションを破棄します。

サンプルコード

session1.php

<?php session_start();?>
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>セッション管理</title>
</head>
<body>
  <?php
  $_SESSION['bridge']=100;
  $b=$_SESSION['bridge'];
  print"ページ1の値は $b です。";
  ?>
  <p><a href="session2.php">ページ2へ</a></p>  
</body>
</html>

session2.php

<?php session_start();?>
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>セッション管理</title>
</head>
<body>
<?php
$b=$_SESSION['bridge'];
print "ページ2の値は $b です。";
?>
<p><a href='session1.php'>ページ1へ</a></p>
</body>
</html>

実行結果

クッキーとセッション管理の違い

どちらもデータを一時的に保存しておく点は同じです。
クッキーはブラウザのみに保管され、セッションはサーバーにも保管されます。セッションの方がセキュリティの安全面が高いと言われています。

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です