• ベストアンサー

session_unsetを使う利点

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

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

  • ベストアンサー
  • MrYoYoYo
  • ベストアンサー率33% (38/115)
回答No.2

同じです。 ただ、session_unset() は PHP4以降でないといけません。 そして、すべてのセッションデータを削除してしますので、セッションデータの一部を削除したい時には使えません。この関数は、ログインチェックを行うようなWEB上ではログアウト処理の時にしか使わないでしょう。 空arrayを入れ込むのは、特定の二次元配列を削除するのにも使えます。 $_SESSION['user'] = 'user_name'; $_SESSION['form'] = 'name'; $_SESSION['form'] = 'name2'; $_SESSION['form'] = 'name3'; $_SESSION['form'] = array(); //この場合は$_SESSION['user']はまだあります。 $_SESSION = array(); //すべてのセッションが消されます。 といった感じです。 すべてのデータを消す場合は、session_unset() のほうが個人的には好きです。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

noname#49664
noname#49664
回答No.1

セッション変数用の関数 session_register()、 session_unregister()、session_is_registered()、session_unset() は、古いバージョンのPHPからあるもので、グローバル変数をセッション変数として取り扱うためのものです。互換性などの点から引き続き使える状態になっているんじゃないでしょうか。 現在のバージョン(PHP5など)では、$_SESSIONの初期化は、$_SESSION=array();が良いようです。人によっては、現在はsession_unset()は使うべきではないという人もけっこういます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • $_SESSION = array() と session_destroy(); の関係性。

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

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

    SESSIONを使用し、問い合わせフォームを作っています。 最後に問い合わせ完了をした際にSESSIONの削除をおこなっているのですが、 どのSESSION削除方法がよいかわからずご質問させていただきました。 ・unset(); ・$_SESSION = array(); フォームから受け取るSESSIONは $_SESSION['contact']['key']; $_SESSION['contact']['data']['name']; $_SESSION['contact']['data']['email']; としており、 unset($_SESSION['contact']); としています。 ところが、ユーザーAとユーザーBが同時にお問い合わせページに入力をおこなったとし、ユーザーAが先に完了した場合ユーザーBのSESSIONも削除される(切れる?)といった現象がおきており、困っております。(もしかしたら別問題かもしれませんが・・・) 自分の認識では unset()は個別に削除でき、ユーザーAのSESSIONのみ削除する。 $_SESSION = array();はユーザーA、ユーザーB両方のSESSIONを初期化(削除)すると認識しております。 間違っておりませんでしょうか?

    • 締切済み
    • PHP
  • PHP session_destroyとsession_unsetの違い

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

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

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

    • ベストアンサー
    • PHP
  • セッションの宣言

    PHPでセッションの配列を使いたいのですが、 $SESSION['foo'] = array(); のように、宣言して使うと、同じページを読んだ時に セッションが空になってしまうのですが、 通常どのようにして宣言しているのですか?

    • 締切済み
    • PHP
  • 配列をセッションに割り当てた後で

    javaBeanでDBにアクセスして、取得した値を配列に格納します。その配列をサーブレット側でgetメソッド使って取得し、セッションに割り当てます。その後、JSP側でセッションを通して配列の各要素を取り出し表示させたいのですが<%= session.getAttribute("Date") %>←(Dateが配列)では配列の各要素ではなく配列そのものが取り出されるのか、 [Ljava.lang.String;@737371 のような文字が表示されてしまいます。 セッションで割り当てられた配列の各要素の値の取得のやり方がわかる方どうかご教授お願いします。

    • ベストアンサー
    • Java
  • セッション変数と配列

    通常の変数であれば、 $var = array($_POST["var1"], $_POST["var2"], $_POST["var3"]); ですが、セッション変数を配列にするにはどうしたら良いのでしょう? (配列から取り出す方法も含め) $var = array($_POST["var1"], $_POST["var2"], $_POST["var3"]); $_SESSION["$var"]; や $_SESSION["$var"] = array($_POST["var1"], $_POST["var2"], $_POST["var3"]); としてみましたが、ダメなんですね。 よろしくお願いいたします。 *PHPバージョンは5です

    • ベストアンサー
    • PHP
  • 不要な配列を消したい

    2次元配列で、不要な要素を取り除きたいのですが良い方法が思い浮かばず、どうしたものかと悩んでいます。 一番初めと5番目を消したいのですが、preg_match で日付の2006にマッチしない要素をunsetしてみましたがうまくいきませんでした。 $data = array ( array('<br>'), array("2006 03 22", test), array("2006 03 23", test2), array("2006 03 25", test3), array('') ); $pattern = '/2006/'; foreach($data as $key => $value) { if(preg_match($pattern, $value[$key])) { unset($data[$key]); } } もし方法をご存知のかたおられましたらよろしくお願いいたします。

    • ベストアンサー
    • 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
  • [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