• ベストアンサー

PHP セッション unset と null

unset($_SESSION["hoge"]); $_SESSION["hoge"] = null; 2つの挙動は同じでしょうか?

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • 4017B
  • ベストアンサー率73% (1306/1777)
回答No.1

php自体の環境設定にもよりますが、実際の運用上はほぼ同じ意味になりますね。ただしプログラム内部的には明確に違う処理が成されているため、安易に同じモノだと覚えないでください。 unset() は変数や配列の存在自体を抹消削除する関数であり、本来であれば Undefined を返すのが正しい挙動であると思われますが…php上では何故か NULL が代替値として返されます。 従って不要になった変数を削除する際に、unset() の代わりに $hoge = null; を行う様に記述された解説書などもありますが。しかしこれは明確に誤りであり、unset() と null は全く別の概念であると学習すべきです。 - 参考リンク:NULLと未定義の違い https://qiita.com/mpyw/items/0a4ea0bc9a695da33f0c

muuming2001
質問者

お礼

ああ 確かにunset だと undefinedの状態に戻りますね。 ありがとうございます。

関連するQ&A

  • PHP session_destroyとsession_unsetの違い

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

    • ベストアンサー
    • PHP
  • Sessionがnullになりません。

    下記の環境でWebアプリケーションを開発しています。 java 1.5 eclipse 3.3 tomcat 5.5 ある画面Aは検索ボタンを押して結果一覧を表示したり、 結果一覧の詳細を知るためにリンクを押して、ポップアップ画面Bを表示したりします。 web.xmlに <session-timeout>10</session-timeout> と記述し、10分でタイムアウトとしています。 Servlet処理の最初で request.getSession(false) によりセッションを取得し、nullであればタイムアウト画面に遷移させています。 結果一覧を表示した後、10分間何もせずに画面Bを表示しようとすると ポップアップの画面はタイムアウト画面で表示されます。 Servletにブレークポイントをつけて確認したところ このときのrequest.getSession(false)の結果はnullでした。 タイムアウト画面を×ボタンで閉じ、A画面内で検索ボタンを押したところ、 request.getSession(false)の結果はnullではありませんでした。 ただし、session内にsetAttributeしていたBeanが全てnullになっており、 その後の処理で例外が発生してしまいました。 なぜ検索ボタンを押したところで sessionがnullになっていないのでしょうか?

    • ベストアンサー
    • Java
  • php session cookie 概念

    いつもお世話になっております。 php&mysqlにて会員制サイトを作成中です。 sessionを用いて期待する動作は実現できたのですが、どうしても理解できないことがあります。 sessionについて色々と調べますと、 1)サーバーサイドで処理する方式(URIに埋め込む) 2)クライアントサイドで処理する方式(cookieに渡す) となっております。 ところが、 作成中のサイトでは、cookieを利用していないのですが、URIにも何も付加されていません。 それでも、ログイン・ログオフ状態はそれぞれ望む通りに表示されています。 これは一体どういうことなのか、お分かりになる方がいらっしゃいましたらご回答をお願い致します。 以下に大まかなコードを。 ログイン直後のページ session_start(); session_unset(); if(!isset($_SESSION["user_session"])){ session_register("user_session"); $_SESSION["user_session"]=$hoge; } その他のページ session_start(); $hoge=$_SESSION["user_session"]; if(!empty($hoge)){ echo "ログインしてません"; }else{ echo "ログインしてます"; } 以上のようなものです。 マイページはIDとパスワードで認証しており、本人以外は見ることができないのですが、その他のページはログインすれば誰でも見ることができるようになっています。 現段階で特に暗号化などの処理は施しておりませんが、セキュリティー関連は今後の作業として予定しております。 個人サイトを作り始めて半年で、色々と不勉強な部分、理解が不十分な部分がございます。 分かりやすく説明いただけると助かります。

    • ベストアンサー
    • PHP
  • null代入とunset()の違いについて

    null代入とunset()では、違いがあるのでしょうか? 検索してみたところ、下記ページにたどり着いたのですが、 結論としては、このページ下のコメントに書かれているとおり、 あまり気にしなくてよいでしょうか? ▽http://www.cpa-lab.com/tech/097 >利用者からは気にする必要が無い部分ではないかと <経緯> nullが分からないので、調べていました。 var_dump($x);//未定義では、NULL $x = NULL; var_dump($x);//NULLを代入しても、NULL $y = "hoge"; unset($y); var_dump($y);//unsetしても、NULL ここまできて、 「NULLを代入する」と、「変数破棄」の違いが、 分からなくなりました…

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

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

    • ベストアンサー
    • 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
  • PHPのセッションファイルのロックについて

    PHPにて通常のfileにてセッションを利用するとき セッションファイルはセッションを使用するページが終了するまで ロックされていたりしますか? ページ A セッション開始 → 20秒かかる重い処理 → このあと$_SESSION["hoge"] = 1; ページB セッション開始 → すぐに$_SESSION["hoge"] = 2; ページAを読み込み始めて10秒後にページBを読み込み開始した場合 $_SESSION["hoge"] は 1になりますか2になりますか?

    • ベストアンサー
    • PHP
  • $_SESSION = array() と session_destroy(); の関係性。

    //(1)セッション変数の値をクリア $_SESSION = array() //(2)セッションファイルを破棄 session_destroy(); ----------------------------------------------------- 以前にも似たようなことを質問させて頂きましたが、 その時には気にならなかった点が気になって来ましたので、 質問させて頂きます。 で、早速ですが、 (2)をするにあたり、(1)をする意味がわからないので、 どなたか教えて下さい。 セッションファイルを削除したならば、 セッション変数は引っ張って来られなくなるのでは? と私は思っているわけです。 よって、結局、引っ張って来られなくなる変数を、 (1)のようにしてクリアしておく意味が分からないのです。 セッション変数の値は、 セッションファイルから引いてきていると思っているのですが、 そうではないのでしょうか? ---------------------------------------------------------- また、 ちょっと話題は変わり、 unset($_SESSION)としてしまうと、何やらイケナイようなのですが(マニュアルにそう書かれている)、 これをすると、実際、どうなるのでしょう? セッション変数に登録されている複数の値を消す場合には、 array()を使ったり、session_unset()を使えば 良いことは分かっております。 私が知りたいのは、こういうことではなく、 あくまで、unset($_SESSION)してしまうと、 どうなってしまうのか(復元不能な致命的なソース破壊に陥る?!)、 これが知りたいのです。 よって、大きく分けて、質問は2つあることになります。 以上、よろしくお願い致します。

    • ベストアンサー
    • PHP
  • sessionがクリアされない

    教えてください。 BBB.phpでこのように書いていたとします。 <?php session_cache_limiter('private, must-revalidate'); session_start(); ~いろいろ処理~ unset($_SESSION['pcode']); ~いろいろ処理~ ?> <?php include(dirname(__FILE__).'/../include/header.php'); ?> </body></html> header.phpでは $_SESSION['pcode']を表示しているのですが、 前のページ(たとえばAAA.php)で$_SESSION['pcode']に値を入れていた場合 BBB.phpを表示すると その値が表示されてしまいます。 直前に unset($_SESSION['pcode']); をしているのに その前の値が表示されます。 includeはどのタイミングでなされるのでしょうか? また、 unset($_SESSION['pcode']); を有効にするにはどうすればいいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • session_unsetを使う利点

    session_unset()を実行すると$_SESSIONが要素数0の配列になりました。 $_SESSION=array();とするのと何が違うのですか?

    • ベストアンサー
    • PHP