たけるのプログラミング

作ったものとか、気ままにアップします。

【PHP】クッキーとセッション勉強会

クッキー(cookie)とは

Webブラウザにデータを保存するためのファイルのこと、Webブラウザに保存されるデータのこと

セッション

ユーザーが行う一連の操作のこと 例えば ログイン-> ............ ->ログアウト の流れ

使われる場面

よくある例えだが、ショッピングサイトでカートに商品を入れ、ページを開いているタブを閉じ、再び開きカートをみると先ほど入れた商品が入っているという仕組みはクッキーが活用されている。

そもそもなぜcookieが必要なのか

ステートレス

通信プロトコルであるHTTPはステートレスつまり状態を保持することができないため、cookieを利用してセッションを管理する必要がある。

プログラムを書いてみる

ページにアクセスした際に、countを1プラスするプログラムを作成する。

①setcookieを利用したパターン

PHP: setcookie - Manual

<?php
if(!isset($_COOKIE['count'])){
    setcookie('count',0);
    echo '初めてですね!';
}else{
    setcookie('count',$_COOKIE['count'] += 1);
    echo $_COOKIE['count'].'回目の更新ですね!';
}
?>

最初にページを開くと '初めてですね!' と表示され、ページを更新するごとにcountがプラス1されて画面に表示されます。
ブラウザでcookieを確認するには(Chrome)の場合は開発者ツールを開き、アプリケーション→Cookieから確認することができます。
f:id:takeru232423:20220302205612p:plain



またHttpヘッダを確認することにより、Cookieが設定されているかも確認することができます。Chromeの場合、開発者ツールからネットワーク→左の名前という部分からURLを選択し、ヘッダーという部分で確認することができます。1回目のアクセスを行うとレスポンスヘッダーに Set-Cookie: count=0 という部分があります。これはサーバーからブラウザに対してcount=0を保存するよう指示を出していることを意味しています。
HTTP Cookie の使用 - HTTP | MDN


setcookieに関して以下の記事を読むと、セキュリティーに関して考えなければいけないことがわかる。
setcookie()っていつ使うの? - Qiita


②session_startを利用したパターン(cookieとしてセッションIDをブラウザに保存する)

PHP: session_start - Manual

<?php
session_start();
if(!isset($_SESSION['count'])){
    $_SESSION['count'] = 0;
    echo '初めてですね!';
}else{
    $_SESSION['count']++;
    echo $_SESSION['count'].'回目の更新ですね!';
}
?>
流れ
  1. ユーザーがページにアクセス(リクエスト)
  2. session_start()によりセッションを開始し、セッションIDを生成し、レスポンスヘッダーにてCookieに保存するように指示を出す。セッションIDによりサーバーはユーザーを識別することができる。(レスポンス)
  3. 2回目のリクエストの際にリクエストヘッダにセッションIDを含めてアクセス(リクエスト)
  4. セッションIDに基づいた値などを使い処理を行い返す(レスポンス)

あとは3、4の繰り返し。①と同様の方法でヘッダーの確認が可能。①のやり方と大きな違いはデータ自体をCookieに保存していないこと。①ではcountとその値をCookieに保存していたが、②ではセッションIDだけをCookieに保存している。countとその値はセッションファイルに保存されている。なのでセッションIDをもとにセッションファイルから$_SESSIONというグローバル変数を使って値を取得しているということ。
またこのセッションIDが他人にバレてしまうと、個人情報流失してしまう恐れがある。(セッションハイジャック)以下の動画が面白かった。