alienHRNの訓練日記

IT業界初心者で勉強中。

20200915 授業メモ

授業内容

 

 

 

cookieの続き


<?php
// ■ COOKIEとは
// ・閲覧者のブラウザに値を保存する技術
// ・有効期限を決めて保存することができるので
//   PCを切っても値が保存される
// ・発行元サイトの情報をもっているので、
//   同じサイト内であればページをまたいで
//   値を共有できる

// ■ 2回目以降:クッキーが届いている場合
// クッキー受け取り専用変数「$_COOKIE」が
// 連想配列で受け取る
// 部屋の名前:クッキーの名前
// 部屋の中に入る値:クッキーの値
$count = isset($_COOKIE['count']) ? $_COOKIE['count'] + 1 : 1;
// ■ 代入演算子の右辺で三項演算子
// 条件 ? true時の処理 : false時の処理;
// 条件:isset($_COOKIE['count'])
//    countという名前のクッキーがあるか
// true時の処理:$_COOKIE['count'] + 1
//    受け取ったクッキーを+1して変数countに代入
// false時の処理:1
//    「1」を変数countに代入
// ■ 初回アクセス時はクッキーがないので
//   変数countに「1」を代入
// ■ 2回目以降はクッキーが届いているので
//   クッキー内の値(前回アクセス数)+1して
//   変数countに代入

// 条件:カウント変数が10以上だったら
if ($count >= 10) {
  // 10以上だったらクッキーを削除
  $bool = setcookie('count'$counttime());
else {
  // 10より小さい場合はクッキーを発行準備
  $bool = setcookie('count'$counttime() + (60 * 60 * 24 * 10));
  // 60*60=1時間
  // 1時間*24=1日
  // 1日*10=10日

  // setcookie関数:クッキー発行準備
  // 第1引数:クッキーの名前
  // 第2引数:クッキーの値
  // 第3引数(省略可):有効期限をタイムスタンプで設定
  //   省略時はブラウザを終了するまで
  // 戻り値:クッキー発行準備OKで「true」
  //        クッキー発行準備NGで「false」
}

// クッキーの確認はsetcookieの後で行う
echo '<pre>';
var_dump($_COOKIE);
echo '</pre>';
?>
<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>クッキー</title>
</head>

<body>
  <h1>クッキーを使ったカウンター</h1>

  <?php if ($bool) : ?>
    <p>アクセス回数:<?php echo $count?></p>
  <?php else : ?>
    <p>クッキーを発行できませんでした</p>
  <?php endif?>

  <?php if ($count > 5) : ?>
    <p>たくさんアクセスしてくれてありがとう</p>
  <?php endif?>

  <p><a href="01_cookie.php">01_cookie.php</a></p>

</body>

</html>


cookie発行時の注意点
・setcookie関数は出力処理の後で呼び出すことができない
・session_start関数も内部でcookieを発行しているので
出力処理後にsession_start関数を呼び出すことができない。

※output_bufferingにバッファの数値が指定されているとき
は多少の出力はおk

□クッキー
クライアント側に値が保存される
△メリット
長期間保存できる
ページ間で値を共有できる。
△デメリット
改ざんされたり消去される可能性がある。(安全性が低い)

□セッション
サーバ側に値が保存される
△メリット
ページ間で値を共有できる
安全性が高い
△デメリット
長期間の保存はできない





※バッファリングとは
複数の機器やソフトウェアの間でデータをやり取りするときに、
処理速度や転送速度の差を補ったり、通信の減速や中断に備え
て専用の記憶領域に送受信データを一時的に保存しておくこと。

※bom(Byte Order Mark)BOMとは、Unicodeで記述された文書の冒頭に記載される短い符号で、
使用されている文字符号化方式(文字エンコーディング)の種類や、そのバイト順(エンディアン
を指定するためのもの。
BOMとは、Unicodeで記述された文書の冒頭に記載される短い符号で、
使用されている文字符号化方式(文字エンコーディング)の種類や、
そのバイト順(エンディアン)を指定するためのもの。
例)UTF-8UTF-16

cookie セッション
03_test01.phpより

<?php

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



<!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>セッション変数使用</p>
</body>

</html>



03_test02.php


<?php

session_start();
$name = isset($_SESSION['name']) ?  $_SESSION['name'] : '値がねーよ';
$mail = isset($_SESSION['mail']) ?  $_SESSION['mail'] : '値がねーよ';
// セッション変数を利用する際は値があるか確認してから利用する
// 連想配列形式で値が管理されているので部屋の名前を指定して利用
?>


<!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>
    <?php echo $name?>
    <?php echo $mail?>
  </p>
</body>

</html>