クロピグログ

職業訓練で学んだことまとめ

【PHP授業九日目】クッキー・セッション(続き2)

クッキー・セッション(続き2)

●クッキー使われてるところ

・ホームページに訪れたことをきっかけに、特定の広告を繰り返し目にするようになるという現象

・リターゲティング広告という

 

●クッキーの確認はsetcookieの後で行う

echo '<pre>';
echo var_dump($_COOKIE);
echo '</pre>';

 

●同じサーバーなら、アクセス数共有される

 

●クッキーはクライアント側に保存される

 

●クッキーの削除方法

・クッキーを削除するときは少し特殊で、サーバーからクライアント側のクッキーを削除するのは無理

・すぐに有効期限切れになるクッキーを発行

・クライアント側にあるクッキーを上書きした後、即有効期限切れになってクッキーを消滅する

 

●おみくじでクッキー利用すれば、その日の間は結果が変わらないおみくじ作れる

 

■クッキー発行時の注意点

・setcookie関数は出力処理の後で呼び出すことができない

 

●「UTF-8」じゃない「UTF-8 withBOM」みたいな文字コードにしておくとエラーになる(テラパッドだと「UTF-8 M」)

● BOM(Byte Order Mark)

 

 

セッション

f:id:chromiumpig:20200915134106p:plain

●セッションとは

・クッキーを使ってユーザを認識し必要なデータをサーバ側に保存して使用する

・データがサーバ側にあるので、悪意あるユーザにデータ改ざんされる心配ない

・ネットワーク上に値が流れないので、盗聴される心配なく、クッキーに比べて安全性が高く、データ量の制限も実質ない

 

●これ呼び出せばすぐに使える

$bool = session_start();

 

テスト

03_test1.php

<?php
session_start();
 セッション変数($_SESSION)を使用可能にする関数
$_SESSION['name'] = '綾人';
$_SESSION['mail'] = 'aaaa@.aaaa';
 $_SESSIONは連想配列形式で利用する
 自分で部屋を作成、値を代入して利用
 セッション変数の値は他のページで利用できる
?>

 

03_test2.php

<?php
session_start();
$name = isset($_SESSION['name']) ? $_SESSION['name'] : '値がありません';
セッション変数を利用する際は値があるか確認してから利用する
連想配列形式で値が管理されているので部屋の名前を指定して利用
?>
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <p>
    <? echo $name?>
    <? echo $_SESSION['mail']; ?>
  </p>
</body>

 

02_session.php

<?php
$bool = session_start();
 session_start関数
 セッション変数利用可能にする
 ■ 初回:ユーザ識別用クッキーがない
 1.ユーザ識別用クッキー発行準備
 2.ユーザ識別用クッキーに対応する「$_SESSION」を利用可能にする
 3.対象ユーザ用セッションファイル作成

 ■ 2回目以降:ユーザ識別用クッキーがある
 1. 受け取ったユーザ識別用クッキーで
    対象ユーザのセッション変数を利用可能にする
 

■ 初回
issetの結果 → false → ! → true
■ 2回目以降
issetの結果 → true → ! → false
if (!isset($_SESSION['count'])) {
  初回アクセス時の処理
  $_SESSION['count'] = 1;
else {
  2回目以降のアクセス時の処理
  $_SESSION['count']++;
}
 $_SESSION['count']の値が10を超えたら削除
(3つ消しに行く)
if ($_SESSION['count'] > 10) {
  ■メモリ上からセッションを削除
  サーバのメモリからセッション配列を参照できなくする
  $_SESSION = array();
  ■ユーザ識別クッキーの削除
  setcookie(session_name(), ''time());
  ■バックアップファイルの削除
  session_destroy();
}
?>

まとめ

■クッキー発行時の注意点

・setcookie関数は出力処理の後で呼び出すことはできない

・session_start関数も内部でクッキーを発行しているので出力処理後にsessin_start関数を呼び出すことはできない

php.intのoutut_bufferingにバッファの数値が指定されている時は多少の出力はOK

 

■クッキー

クライアント側に値が保存される

◇メリット

・長期間保存できる

・ページ間で値を共有できる

◇デメリット

・安全性が低い(改ざんされたり、消去の可能性あり)

 

■セッション

サーバ側に値が保存される

◇メリット

・ページ間で値を共有できる

・安全性が高い

◇デメリット

・長期間保存ができない

 

●setcookie()より前では出力(echo)しないよう気を付ける