56
58

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【PHP】セッションとクッキーを初心者向けに説明

Last updated at Posted at 2020-11-23

超詳しい参考サイト
Web Design Leaves

クッキーとは?セッションとは?から始まる話は難しいので上記のサイトを参考にしてください。
最高にわかりやすいです。

ここでは使用例とセッションとクッキーの関連性に絞ります。

保存先

セッションの保存先はWebサーバーです。
クッキーの保存先はクライアントのブラウザです。

セッションはブラウザとサーバーが接続された時に session_start()によって生成されます。

保存先 変数名
セッション Webサーバー $_SESSION
クッキー ブラウザ $_COOKIE

クッキー(クライアント)のセッションID

ブラウザ側にあるクッキーにはPHPSESSIDが保存されます。
例えば下のような値です。

セッション名  
PHPSESSID '682dos0637qu0g1l8clhs9sv7a'

WebサーバーのセッションID

Webサーバーは数多く保存しているセッションがどのクライアントに紐付くかをPHPSESSIDで判断しています。

Webサーバー(SESSION) ブラウザ(PHPSESSID)
'682dos0637qu0g1l8clhs9sv7a' <-----> '682dos0637qu0g1l8clhs9sv7a'
'7qu0g1l8cl682dos063hs9sv7a'
'lhs9sv7a682dos0637qu0g1l8c'

セッション変数

セッション変数はWebサーバーに保存できる変数です。
Webサーバーに変数が保存できると何が便利なのでしょうか?

セッション変数の利点
ページをまたいで値のやりとりができる。
ブラウザを経由しないため改ざんされづらい。

具体例
send.phpにアクセスすると即時receive.phpに飛んで'51'を画面出力します。

send.php
<?php
session_start();
$_SESSION['id'] = '51';
//リダイレクト
header('location: ./receive.php');
receive.php
<?php
session_start();
echo $_SESSION['id'];
//string -> 51

どうでしょう?うまくいきましたね!
send.phpで$_SESSION['id']保存して、receive.phpでアクセスできました!

session_start();はセッションを使用するときのおまじないです。
各ファイルの先頭に必ず置いてください。

クッキーのセッションIDを確認する

ここで、クッキーに保存されているPHPSESSIDを確認してみましょう。
Chrome:
デベロッパーツール -> Applicationタブ -> Cookies -> URL -> Value

Safari:
Safariの準備 -> 環境設定 -> 詳細 -> メニューバーに“開発”メニューを表示
開発タブ -> Webインスペクタを表示 -> ストレージタブ -> Cookie -> 値

PHPSESSIDが確認できたでしょうか?
PHPSESSIDはそれが破棄されるまで同じ値が使用されます。

セッションの破棄

上で破棄されるまでと言いました。
それでは破棄してみましょう!(公式

delete_session.php
<?php
session_start();
//セッションの初期化
$_SESSION = [];
//セッションクッキーを削除
if (isset($_COOKIE[session_name()])) {
    setcookie(session_name(), '', time() - 42000, '/');
    unset($_COOKIE[session_name()]);
}
//セッションを破壊
session_destroy();

//ここまででPHPSESSIDもセッションも消去されています。

//リダイレクト -> send.php -> 新たなPHPSESSIDが生成される
header('location: ./send.php');

send.php, receive.php, delete_session.phpは同じフォルダに入れてください。

デベロッパーツールでPHPSESSIDを観察しながら、
send.php動作 -> delete_session.php動作で。
PHPSESSIDが生成 -> 変更 されているのが見えます!

ぜひデベロッパーツールで確認してみてください。

どうでしたでしょうか?
セッション変数の利用の一助になれば幸いです。

LGTMお願いします!
ストックのついでにお願いします!
モチベーションがあがります!

56
58
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
56
58

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?