- ベストアンサー
[PHP]セッション破棄について
- phpを使ったログアウト処理について質問です。
- ログアウト処理にはlogout01.phpとlogout02.phpという2つの方法がありますが、違いは何でしょうか。
- また、セッションの破棄方法やクッキーの削除についても教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>「$_SESSION = array();」は全セッションの初期化 セッション変数$_SESSIONの中身を空(初期化、破棄)する。 >「session_destroy();」は全セッションの破棄 セッションを破棄する。ただしセッション変数は破棄しないから ですから一般的には $_SESSION = array(); をやってから session_destroy(); をする。 >「unset($_SESSION['access']);」は指定したセッションの破棄 セッション変数$_SESSION['access']の破棄。 だから別AとBという内容があり Aだけがいらなくなったら $_SESSION['A']でAのみ破棄してBを残すこともできます。 セッションとセッション変数は別々に考えましょう。
その他の回答 (1)
- papa987
- ベストアンサー率19% (21/106)
$_SESSION = array(); の場合は破棄ではなくて配列を作る関数とでも書けば理解できますか? でarray();とすることで空の配列変数となっただけです。 すでに配列にないか入っている状態で配列変数を空にするときに使うことがあります。 次にまずunset関数のの役割を理解しよう。 http://www.google.co.jp/search?hl=ja&safe=off&q=PHP+unset&lr= 簡単に書くと変数を破棄する関数です。 で、 unset($_SESSION); と書いたら$_SESSIONそのものを破棄 unset($_SESSION['access']); と書いたら $_SESSION内のaccessという名前の連想配列を破棄したことになり $_SESSIONそのものは破棄はされないと言うことになります。
お礼
ご回答ありがとうございます。 >$_SESSION = array(); >の場合は破棄ではなくて配列を作る関数とでも書けば理解できますか? >でarray();とすることで空の配列変数となっただけです。 >すでに配列にないか入っている状態で配列変数を空にするときに使うことがあります。 ⇒つまり、セッションの初期化ではなく、破棄をしたい場合、 logout01.phpでは「session_destroy();」のみで破棄が行われているということですね。 >unset($_SESSION); >と書いたら$_SESSIONそのものを破棄 >unset($_SESSION['access']); >と書いたら >$_SESSION内のaccessという名前の連想配列を破棄したことになり >$_SESSIONそのものは破棄はされないと言うことになります。 ⇒つまり、unset($_SESSION['access'])、unset($_SESSION['access02'])、unset($_SESSION['access03'])と 1つずつ破棄していくか、「session_destroy();」でまとめて破棄するかが違うだけで処理そのものは同じ ことをしているということですね。 まとめると、下記の通りということですね。 「$_SESSION = array();」は全セッションの初期化 「unset($_SESSION['access']);」は指定したセッションの破棄 「session_destroy();」は全セッションの破棄
お礼
ありがとうございます。 おかげでモヤモヤしていたものがスッキリしました。