【PHP】クッキーとセッション勉強会
セッション
ユーザーが行う一連の操作のこと 例えば ログイン-> ............ ->ログアウト の流れ
使われる場面
よくある例えだが、ショッピングサイトでカートに商品を入れ、ページを開いているタブを閉じ、再び開きカートをみると先ほど入れた商品が入っているという仕組みはクッキーが活用されている。
そもそもなぜcookieが必要なのか
プログラムを書いてみる
ページにアクセスした際に、countを1プラスするプログラムを作成する。
①setcookieを利用したパターン
<?php if(!isset($_COOKIE['count'])){ setcookie('count',0); echo '初めてですね!'; }else{ setcookie('count',$_COOKIE['count'] += 1); echo $_COOKIE['count'].'回目の更新ですね!'; } ?>
最初にページを開くと '初めてですね!' と表示され、ページを更新するごとにcountがプラス1されて画面に表示されます。
ブラウザでcookieを確認するには(Chrome)の場合は開発者ツールを開き、アプリケーション→Cookieから確認することができます。
また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(); if(!isset($_SESSION['count'])){ $_SESSION['count'] = 0; echo '初めてですね!'; }else{ $_SESSION['count']++; echo $_SESSION['count'].'回目の更新ですね!'; } ?>
流れ
- ユーザーがページにアクセス(リクエスト)
- session_start()によりセッションを開始し、セッションIDを生成し、レスポンスヘッダーにてCookieに保存するように指示を出す。セッションIDによりサーバーはユーザーを識別することができる。(レスポンス)
- 2回目のリクエストの際にリクエストヘッダにセッションIDを含めてアクセス(リクエスト)
- セッションIDに基づいた値などを使い処理を行い返す(レスポンス)
あとは3、4の繰り返し。①と同様の方法でヘッダーの確認が可能。①のやり方と大きな違いはデータ自体をCookieに保存していないこと。①ではcountとその値をCookieに保存していたが、②ではセッションIDだけをCookieに保存している。countとその値はセッションファイルに保存されている。なのでセッションIDをもとにセッションファイルから$_SESSIONというグローバル変数を使って値を取得しているということ。
またこのセッションIDが他人にバレてしまうと、個人情報流失してしまう恐れがある。(セッションハイジャック)以下の動画が面白かった。