• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:$_SESSION = array() と session_destroy(); の関係性。)

$_SESSIONとsession_destroy()の関係性

dell_OKの回答

  • ベストアンサー
  • dell_OK
  • ベストアンサー率13% (744/5658)
回答No.2

unset($_SESSION) については、少なくとも「復元不能な致命的なソース破壊に陥る」と言う事はないと思います。 「正常に動作しなくなる処理がある」と言う程度で、それがどんなものであり、どう影響してくるのかは不明です。 どちらのマニュアルをご覧になられたのかわかりませんが、 http://www.php.net/manual/ja/function.session-unset.php によると、「警告 $_SESSION スーパーグローバルを使用した セッション変数の登録が不可能になってしまうため、 unset($_SESSION) を使って $_SESSION を完全に unset しないでください。」とありました。 私が試してわかった事は unset($_SESSION) の後に session_unset() を実行しても動作しない、でした。 セッションに関する関数が正常に動作しなくなる可能性がある、と言う判断です。 上記の警告にあった「セッション変数の登録が不可能になってしまう」と言う事はなさそうです。 まずこれを実行してみました。 $_SESSION["a"]="a"; unset($_SESSION); echo "unset:"; print_r($_SESSION); $_SESSION["a"]="a"; session_unset(); echo "session_unset:"; print_r($_SESSION); 結果は、 unset:session_unset:Array ( [a] => a ) で unset() には成功していますが、その後の session_unset() には失敗しているようです。 次にこれを実行してみました。 $_SESSION["a"]="a"; unset($_SESSION["a"]); echo "unset:"; print_r($_SESSION); $_SESSION["a"]="a"; session_unset(); echo "session_unset:"; print_r($_SESSION); 結果は、 unset:Array ( ) session_unset:Array ( ) でどちらにも成功しています。 ついでに、こちらも。 $_SESSION["a"]="a"; //unset($_SESSION); echo "unset:"; print_r($_SESSION); $_SESSION["a"]="a"; session_unset(); echo "session_unset:"; print_r($_SESSION); 結果は、 unset:Array ( [a] => a ) session_unset:Array ( ) で unset() をコメントにしているので当然このようになります。 はっきりとどのような影響があるのかはわかりませんが、バージョンによって異なるかも知れませんし、少なくとも、ひとつこのような現象があると言う事です。 すっきりしない部分があり、私も気になりますが、データが不正になるような事はありそうです。 また、コードをそのたびにコンパイル実行しているのでコンパイルコードに問題が発生したとしても、ソースそのものがどうにかなるような事はないように思います。

march4
質問者

お礼

実際に、身を持ってunsetして頂き、どうもすみません。 私は、致命的な破壊につながるのではと思い、怖くて出来ずにおりました。笑 >unset($_SESSION) については、少なくとも「復元不能な致命的なソース破壊に陥る」と言う事はないと思います。 >「正常に動作しなくなる処理がある」と言う程度で、それがどんなものであり、どう影響してくるのかは不明です。 こちらの説明が、 実験して頂いたコードと、その結果を読むことで、 しっかり伝わってきました。 説得力のある回答を頂き、うれしく思います。 unset($_SESSION['example']); こちらについては問題ない、ということを把握しておりましたが、 unset($_SESSION); については、気になっておりまして、 それが、今回の回答で大分スッキリ致しました。 >はっきりとどのような影響があるのかはわかりませんが、バージョンによって異なるかも知れませんし、少なくとも、ひとつこのような現象があると言う事です。 はい、よくわかりました。^^ こちらの回答も読みやすく、大変助かりました。 どうもありがとうございます。

関連するQ&A

  • PHP session_destroyとsession_unsetの違い

    session_destroyとsession_unsetの違いは何でしょうか session_unsetはセッションの開放します session_destroyはセッションを破壊しますといわれても よくわかりません。

    • ベストアンサー
    • PHP
  • セッション中の1つの変数をunsetする

    にはどうしたらいいのでしょうか? session_unset() や session_destroy() はすべてのセッション変数がunsetされてしまいます 特定の1つの変数をサーバのセッションエリアからunsetするにはどうしたらいいのでしょうか?

    • ベストアンサー
    • PHP
  • セッション変数の破棄について、いまひとつスッキリしない部分があります。

    セッション変数の破棄について、いまひとつスッキリしない部分があります。どなたか詳しい方是非ご教授お願いいたします。会員サイトからログアウトするときは、$_SESSION=array(),session_destroy(),そしてクッキーの削除で処理をしてきました。特に問題なく動作をしておりますが、もしログアウト でunset($_SESSION[hogehoge])のように変数を破棄した場合、他のuserの$_SESSION[hogehoge]も削除されてしまうのでしょうか?この部分が、ず~っと疑問に残り解決できませんでした。PCが複数 台あれば、実験してたりかめることもできるのですが1台しかないのでそれができません。ネット上で ずいぶん検索して調べましたが、そこら辺のところをスッキリと理解できるように説明されたページも 見当たらないようでした。もしよいWEBがありましたら、そちらのWEBを紹介していただく形でも結構です。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP セッションを利用した入力フォーム

    入力内容をセッションで保持しているフォームで, 入力画面から「前の画面に戻る」ボタンが押された際に 保持していた入力内容のセッションを破棄するようにしたいのですが, どのようにしたらいいでしょうか. unset($_SESSION['変数名'])で破棄できるのはわかっているのですが, これをどこに記述したらいいのかがわかりません. それとも,別の破棄する方法があるのでしょうか. 入力内容に関係ないところでもセッションを使っているので, session_destroy()ですべて破棄するのはしたくありません. よろしくお願いいたします.

    • ベストアンサー
    • PHP
  • PHPのセッション終了について

    PHPのセッション終了について http://c-brains.jp/blog/wsg/08/05/22-193020.php こちらのサイトでPHPを勉強しています。 セッションについてなのですが、セッションの開始と関数の働きはつかめたのですが、セッションの終了について不明な点があります。 <?php // セッションの開始 session_start(); // セッション変数の初期化 $_SESSION = array(); // セッションファイルの削除 session_destroy(); ?> この部分なのですが、セッション変数の初期化のみの記述では何がいけないのかが分かりません。 $_SESSION = array(); のみの記述で試してみたところ、$_SESSION に含まれていたキーを呼び出しても中身を出力しなかったので、ちゃんと中身は消えたと思うのですが、この場合、session_destroy()を実行する意味はあるのでしょうか? 何卒ご教授いただけますようお願い致します。

    • ベストアンサー
    • PHP
  • PHP SESSION変数の削除について

    PHPでブラウザを×で閉じた場合、SESSION変数 の廃棄はどうすればよいのでしょうか? ガーペジコレクション(PHP.INI等の設定)に任せておけばよいのでしょうか? ちなみにログアウトの際は下記のプロシジャを実行しています。 ----------------------------- <?php session_start(); // セッション変数を全て解除する $_SESSION = array(); // セッションを切断するにはセッションクッキーも削除する。 // Note: セッション情報だけでなくセッションを破壊する。 if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } // 最終的に、セッションを破壊する session_destroy(); ?> -----------------------------

    • 締切済み
    • PHP
  • 特定のセッション変数の内容だけ破棄

    $_SESSION['data1'] $_SESSION['data2'] $_SESSION['data3'] $_SESSION['data4']  このようにセッション変数が複数ある場合、session_destroy();を宣言するとすべてのセッション変数の内容が破棄されますが、例えば「$_SESSION['data1']と$_SESSION['data2']だけ」といったように、特定のセッション変数の内容だけを破棄することは出来ますか?

    • ベストアンサー
    • PHP
  • 完全なセッション破棄をしたい

    現在運営中のアンケートフォームを改善したいと思い、質問させていただきます。 現在のアンケートフォームは、入力画面.php→確認画面.php→メール送信.php→完了画面.htmlの4ファイルで構成していて、画面としては3画面です。 また、入力値についてはセッション管理をしています。 メール送信後は、以下の命令でセッション破棄・完了画面.htmlの呼び出しを行っております。 $_SESSION = array(); session_destroy(); header("Location: 完了画面.html"); ところが、セッションが完全に破棄されておりません。 具体的にあげますと、完了画面でブラウザの戻るをクリックして確認画面.phpへ戻り、「ページの有効期限が切れています」と表示されるためリロードを行うと値が入った確認画面が表示されてしまうのです。 ページの有効期限が切れていますうんぬんはかまわないのですが、リロードした時に破棄したはずの値がなぜ表示されてしまうのでしょうか。 また、最終的に求めている「同じ内容が二重送信されないようにする」のために、どのように修正すればよいでしょうか。 アドバイス、お願いいたします。

    • ベストアンサー
    • PHP
  • ログアウトする際にセッションファイルを削除したい

    PHPでWEBアプリケーションを作成しています。 携帯対応にするために、フォームを使用できないところは セッションIDをURLに付加しています。 ログアウト後(ユーザーがログアウトボタンをクリック)は、戻るボタンをクリックしても「ログインしていません」のエラーメッセージが表示されるようにしたいのです。 現在、ログアウトする際、すべてのセッション変数を削除しているのですが、ブラウザの戻るボタンをクリックすると、もとの画面が表示されます。 その画面にはセッションIDを埋め込んだリンクがあり、 クリックすると正常にリンク先に移動してしまいます。 セッションファイルが残っているために、セッションが継続されたような状態になってしまっているのではないかと思います。 セッションファイルを削除すれば、上記エラーメッセージが表示されるのです。 そこで、ログアウト時にセッションファイルを自動的に削除してしまいたいのですが、どのような方法をとればよいのでしょうか? やっぱり普通にセッションファイルの場所を取得して、削除するしかないのでしょうか? 教えてください。 以下、ログアウト時の処理です。 // セッションの初期化 session_start(); // セッション変数を全て解除する $_SESSION = array(); (session_id('')); // セッションを切断するにはセッションクッキーも削除する。 // Note: セッション情報だけでなくセッションを破壊する。 if (isset($_COOKIE[session_name()])) {   setcookie(session_name(), '', time()-42000, '/'); } // 最終的に、セッションを破壊する session_unset(); session_destroy();

    • 締切済み
    • PHP
  • [PHP]セッション破棄について

    はじめまして。 phpを始めて1週間の初心者です。 現在、ホームページでログイン処理とログアウト処理をphpのセッションを使って作成しています。 今回質問させて頂くのはログアウト処理についてです。 ログアウト処理をでセッションを破棄する際に http://oshiete1.goo.ne.jp/qa3224862.html を参考にして下記の処理を行わせています。 -------------------- logout01.php -------------------- <?php session_start(); $_SESSION = array(); if(isset($_COOKIE[session_name()])){setcookie(session_name(),'',time()-4200,'/');} session_destroy(); header("location: http://~トップページのURL~/"); ?> -------------------- 確認をしたところ、ログインしたユーザの情報は削除されているようでした。 また、http://oshiete1.goo.ne.jp/qa3224862.htmlを参考に下記のようなログアウト処理も行わせてみました。 -------------------- logout02.php -------------------- <?php session_start(); unset($_SESSION['access']); header("location: http://~トップページのURL~/"); ?> -------------------- 同じく確認したところ、ログインしたユーザ情報は削除されているようでした。 -------------------- 環境 -------------------- <サーバ> 【OS】 windows XP(テスト環境)、CentOS 5.2(公開環境) 【PHP】 5.2.6 【Apache】 2.2 <クライアント> 【OS】 windows XP 【ブラウザ】 Firefox 3.0.8 IE 7 -------------------- -------------------- 質問 -------------------- (1)logout01.phpとlogout02.phpの違いは何でしょうか。 (2)「unset($_SESSION);」は使用すると「$_SESSION」が使えなくなるとのことですが、  それはphpを再インストールしない限りは使えなくなるということでしょうか。  それとも、ブラウザを再起動すれば使えるという意味でしょうか。 (3)「unset($_SESSION);」と「unset($_SESSION['access']);」では何が違うのでしょうか。 (3)セッションを使用するとサーバ側にセッションIDを保存したファイルが保存され、  クッキーがクライアント側に保存されるとのことですが、logout01.phpとlogout02.phpを  実行した場合、サーバ側のセッションIDを保存したファイルとクライアント側のクッキーを  保存したファイルは削除されているのでしょうか。 (4)セッションの有効期限を指定していないため、logout01.phpとlogout02.phpを実行せずに  ブラウザを終了させた時もログインしたユーザ情報は削除されているようでしたが、  この場合もサーバ側のセッションIDを保存したファイルとクライアント側のクッキーを  保存したファイルは削除されているのでしょうか。 初歩的な質問で申し訳御座いませんがよろしくお願いします。

    • ベストアンサー
    • PHP