PHP

PHPにおけるセッションデータの取り除き方いろいろ

More than 1 year has passed since last update.

PHPでセッション管理を行う際に使用する$_SESSIONですが、一度セットしたセッションデータを削除する方法について調べたことについてまとめます。

セッションの削除方法

  1. session_destroy()
  2. \$_SESSION = array() 
  3. unset($_SESSION["セッションの名前"])

それぞれ説明していきます。

セッション内のデータを全て消す場合

session_destroy()

セッションデータを一括削除してくれます。
すべてのセッションが空になってしまうので、特定のセッションデータだけを削除したいときにこれは使えない

$_SESSION = array()

セッションは元より連想配列のため、空の配列を代入することでセッションデータを空に置き換え、結果的にセッションを削除することができる

unset($_SESSION["セッションの名前"])

セッションデータを格納する際に設定したセッションの名前を指定して、そのセッションデータだけを個別に削除できる

少し変わったセッションの削除方法

セッションデータを取得するためにはクライアントごとに割り振られたセッションIDを参照して、セッションIDが一致してしているクライアントにサーバー内のセッションデータを返す、というもの。
そのため、クライアントで保持しているセッションIDをリセットしてしまえば、サーバー内のセッションデータを参照できなくなくなり、結果的にセッションデータを削除したように見える。

setcookie("PHPSESSID",'',time() - 1800,'/')

セッションIDはPHPSESSIDに格納される(php.iniの初期設定に依存している)。
セッションIDの有効期限を過去にすることで、セッションIDが消去される。

ただ、この方法でセッションIDを削除したとしても、ブラウザのリロードなどでセッションIDを参照した後でセッションIDを削除しているようです。
つまり、セッションIDの有効期限を過去にして、セッションIDを削除したとしても、ブラウザの表示上からは削除されていないような挙動を起こす、ということです。