PHP セッションを確認する(session)

PHPを動かしてセッションを確認します。
(確認環境:Windows10,Google Chrome,PHP 7.2.8)

目次

概要 セッションとは
セッションの流れ
サンプル サーバー側のセッションを発行/取得するコード
  初回表示時のやり取り
  再読み込み時のやり取り
  サーバー側のセッションIDのファイル
  クライアント側のChromeブラウザでクッキーを確認する
  別タブ起動時等の挙動

セッションとは

クライアントの画面で文字を入力してサーバーにデータを送信すると(リクエスト)、サーバーからの返信(レスポンス)でやり取りは終了します。

もう一度クライアントの画面からサーバーにデータを送信しても、サーバーは同じユーザから送信されたのかどうか判別することができません。

そのため、クライアントとサーバーの複数回のやり取りで、同じユーザが操作していることを認識したい時は、セッションの仕組みを使用します。

 

セッションの流れ

1.クライアントがWebサーバーにアクセスします。
2.WebサーバーのプログラムがセッションIDを生成してクッキーでクライアントに送ります。
3.再度クライアントがWebサーバーにアクセスする時、クライアントはクッキーをWebサーバーに送信します。
4.WebサーバーのプログラムはクッキーのセッションIDを取得して対象を識別します。
PHP クッキーを確認する(cookie)

 

サーバー側のセッションを発行/取得するコード

サーバー側のセッションを発行/取得するPHPのコードです。
画面を再読み込みすると、数値が1つ上がります。

<?php
session_start(); //セッションを開始

if (isset($_SESSION["count1"])) { //issetでセッションを確認
  $rec = $_SESSION["count1"]++; //再アクセス時はcount1に1加算
} else {
  $rec = "初回表示時";
  $_SESSION["count1"] = 1; //セッションにkeyとvalueをセット
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>sessionのサンプル</title>
</head>
<body>
  <?= ($rec) ?>
</body>
</html>

2行目のsession_startでセッションを開始します。
4行目のissetでセッションを確認しています。
最初の表示時の判定はfalseになり、画面に初回表示時と表示されます。
8行目はキーを指定して値を代入しています。
5行目は、値に1を加算しています。

 

初回表示時のやり取り

送信する

ブラウザでサーバー(上記のコード)にアクセスします。
以下は、その時にクライアントからサーバーに送信するHTTPリクエストです。
初回なのでクッキー/セッションはありません。

GET http://localhost:180/testphp/ HTTP/1.1
Host: localhost:180
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHT
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,imag
Accept-Encoding: gzip, deflate, br
Accept-Language: ja,en-US;q=0.9,en;q=0.8

受信する

以下は、サーバーからクライアントに送信されるHTTPレスポンスです。

HTTP/1.1 200 OK
Date: Tue, 11 Aug 2020 04:22:13 GMT
Server: Apache/2.4.43 (Win64) OpenSSL/1.1.1g PHP/7.4.7
X-Powered-By: PHP/7.4.7
Set-Cookie: PHPSESSID=62gb0iscp72sitaa94fn9js8g2; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Content-Length: 156
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8 <!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>sessionのサンプル</title>
</head>
<body >
初回表示時</body>
</html>

サーバで上記のPHPのコードが実行され、クライアントにクッキー/セッションが渡されます。
「PHPSESSID」の=より右の文字列「62gb0iscp72sitaa94fn9js8g2」がセッションの値(セッションID)です。
上記コードにあった"count1"とその値は送信されません。

以下は、ブラウザに表示される画面です。

 

再読み込み時のやり取り

送信する

以下は、再読み込み時にクライアントからサーバーに送信するHTTPリクエストです。
最終行はクッキー/セッションです。

GET http://localhost:180/testphp/ HTTP/1.1
Host: localhost:180
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHT
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,imag
Accept-Encoding: gzip, deflate, br
Accept-Language: ja,en-US;q=0.9,en;q=0.8
Cookie: PHPSESSID=62gb0iscp72sitaa94fn9js8g2

受信する

以下は、サーバーからクライアントに送信されるHTTPレスポンスです。

HTTP/1.1 200 OK
Date: Tue, 11 Aug 2020 04:27:47 GMT
Server: Apache/2.4.43 (Win64) OpenSSL/1.1.1g PHP/7.4.7
X-Powered-By: PHP/7.4.7
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Content-Length: 142
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>sessionのサンプル</title>
</head>
<body >
1 </body>
</html>

クッキーは送信されません。
HTMLの箇所に数値の「1」が入っています。

以下は、ブラウザに表示される画面です。

この後、再読み込みを行うと数値がカウントアップしていきます。
クライアントからサーバーにクッキー/セッションをつけて送信し、サーバーからクライアントにはクッキーがない状態で受け取ります。

 

サーバー側のセッションIDのファイル

XAMPPでは、サーバ側にセッションIDのファイルがあります。

場所は、XAMPPをインストールしたフォルダ配下のtmpフォルダ配下です。
確認した環境では、以下です。

D:\xampp\tmp\sess_62gb0iscp72sitaa94fn9js8g2

sess_から始まる文字列がファイルです。

ファイルの中身は以下のようになっています。テキストエディタで確認できます。

count1|i:3;

 

クライアント側のChromeブラウザでクッキーを確認する

Google Chromeのデベロッパーツールでセッションで使用したクッキーを確認できます。

「F12」キーを押してデベロッパーツールを開き、「Application」→「Cookies」→「http://localhost」をクリックします。

クッキーの内容は、セッションIDのみ確認できます。コードで使用した"count1"とその値は確認できません。

valueの欄にある「62gb0iscp72sitaa94fn9js8g2」はセッションIDです。
サーバにあるファイル名のsess_を除いた部分と一致します。

クッキーは削除可能です。中央の丸に斜め線が入ったアイコンで削除します。

 

別タブ起動時等の挙動

同じブラウザで別タブを起動して操作した時

chromeブラウザでカウントを5まで上げて、別タブを開いて再読み込みした場合、別タブの方に6が表示されます。→共有されます。

別にブラウザを起動して操作した時

chromeブラウザでカウントを5まで上げて、更にchromeブラウザを別に立ち上げて再読み込みした場合、別に立ち上げたブラウザに6が表示されます。→共有されます。

以下はPHPマニュアルのセッション関連のリンクです。
http://php.net/manual/ja/refs.basic.session.php

関連の記事

XAMPP インストールとHello Worldを表示
PHP クッキーを確認する(cookie)
「HTTPリクエスト」と「HTTPレスポンス」

△上に戻る