1)$_SESSIONはどういう目的をもって、どういう働きをするのか?
2)$_SESSIONはどういうデータになっているのか?
ということを考えてみました。
いまからPHPをはじめる、あるいははじめたばかりという方を想定して書かせていただきます。
目的と働きについて
アクセスしてきたユーザーの情報をサーバに保管する。
そしてそのデータを必要に応じで参照する。
ということだと思います。
ここで別のアクセスがあればそのユーザーのデータは別に管理します。
わかりにくいと思いますが、九州のAというPCからアクセスがあった場合はAPCの個人情報を保管し、北海道のBというPCからのアクセスにはBPCの個人情報を保管します。
同時にいくつのアクセスがあっても、それぞれ別のデータとして管理します。
個人情報は登録時にサーバの個人のデータベースに登録されています。
その中から、アクセスしてきたユーザーを特定して個人データをつくります。
たとえばこのデータによって、「こんにちは???さん」などという表示ができます。
また買い物をしたときに、名前、送り先などに利用できます。
注文の確認メールを送ることもできます。
ログインによってユーザー情報を取得するということは、ある意味面機密性を保つことにもなります。
保管されたデータはログアウトするかサイトから離れると消滅します。
もうひとつのデータはたとえば買い物リストです。
サイト内で商品をカートの中に入れて注文します。
この注文リストのデータが必要です。
データ構造について
ここの例の場合では
$_SESSIONデータは上で見たようにサーバが持っている個人データと注文リストのふたつあります。
$_SESSIONは定義済みのグローバル変数で配列を持っています。
持っているというか配列変数です。
先ほどの例でいうと
$_SESSION['customer', 'shoplist'];
のようにふたつのデータを持つことになります。
customerという個人データとshoplistという買い物リストです。
ここで考えたいのはcustomerもshoplistも複数のデータを持っていることです。
customerは氏名、住所、メールなどを持っています。
shoplistは買い物をした商品の単価、数量、金額などがあります。
これを具体的に書くと
$_SESSION['customer'}=['name', 'address', 'mail'];
となっていればいいと思います。
ここで使うことを考えたとき
このままでは添字管理になってしまい、取り扱いが難しくなります。
たとえばnameならcustomer[0]というようになります。
このために連想配列があります。
連想配列は添字を文字にしたものです。
customer=['name'=>'徳川', 'address'=>'三河', 'mail'=>'ieyasu@tokugawa'];
などとすれば、$_SESSION['customer']['name']で徳川が取り出せます。
$_SESSIONは基本的にはこんな形をしていると思います。
つまり$_SESSIONは個人のデータをサーバに一時的に保管するというしくみです。
上の連想配列のところがわからなかったので、投稿させていただきました。