• ベストアンサー

特定のセッション変数の内容だけ破棄

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

  • rusya
  • お礼率56% (167/295)
  • PHP
  • 回答数3
  • ありがとう数5

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

  • ベストアンサー
  • ma2shin
  • ベストアンサー率41% (69/167)
回答No.3

unset($_SESSION['data1']); とすればよいです。 全体を初期化したい場合は、 $_SESSION=array(); とします。 unset($_SESSION)としてはいけません。 (スーパーグローバル変数としての特殊な機能が無効化されてしまうため)

rusya
質問者

お礼

回答ありがとうございます。 unset($_SESSION)は駄目なのですね。覚えておきます。

その他の回答 (2)

  • wp_
  • ベストアンサー率54% (132/242)
回答No.2

以下マニュアル http://jp.php.net/session 例 2204付近にあります。 unset($_SESSION["data1"]); とすればよいです。

rusya
質問者

お礼

回答ありがとうございます。 PHPマニュアルはどうも見にくいので敬遠しがちですが、少しずつ目を通したいと思います。

回答No.1

unset()

rusya
質問者

お礼

回答ありがとうございます。 希望通りの動作が実現できました。

関連するQ&A

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

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

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

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

    • ベストアンサー
    • PHP
  • セッション変数の破棄と再設定

    セッションを破棄する『Session.Abandon』を実行すると、セッション変数が全部破棄されます。 全部は破棄したくないのでいろいろパターンを考えてみたのですが うまくいきません。 (1)破棄したくないものを一旦ワークへ退避し、Session.Abandon実施後に、再びセッションへ設定する。 →どうも、一度破棄してしまうと再びセッションへ設定が出来ないようで、処理ができません (2)使用したセッション変数すべて(破棄したくないものを除く)に ""(空文字列)をセットする。 →これだと一応はOKなんですが、他への流用がきかないため、できればあまりやりたくないです^^; (セッション変数自体も破棄される訳ではないのであまり使いたくないというのもありますが・・・) 最悪は上記(2)で対応できるのですが、他に何か良い対応策があれば教えていただきたいです。 お願いします。。。

  • セッションの破棄

    セッションについて質問です。 $_SESSION['username']を複数ページで使用した後、破棄しようと思うのですが、エラーが出てしまいます。 セッション自体は破棄できていると思うのですが、これはどういったエラーなのでしょうか? ソースコード <?php session_start(); ?> <!DOCTYPE html> <head> <meta charset="utf-8" /> <title>セッション破棄</title> </head> <body> <?php //セッション変数を全て解除 $_SESSION = array(); //セッションクッキーの削除 if (isset($_COOKIE["PHPSESSID"])) { setcookie("PHPSESSID", '', time() - 1800, '/'); } //セッションを破棄する session_destroy(); if(empty($_SESSION['username'])){ echo "<p>セッション終了</p>"; echo "<a href='session.php'>はじめのページへ</a>"; echo "<a href='index.php'>top</a>"; } ?> </body> </html> エラーメッセージ Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/etdfftytg/etdfftytg.php.xdomain.jp/public_html/session3.php:1) in /home/etdfftytg/etdfftytg.php.xdomain.jp/public_html/session3.php on line 2 Warning: Cannot modify header information - headers already sent by (output started at /home/etdfftytg/etdfftytg.php.xdomain.jp/public_html/session3.php:1) in /home/etdfftytg/etdfftytg.php.xdomain.jp/public_html/session3.php on line 16 Warning: session_destroy(): Trying to destroy uninitialized session in /home/etdfftytg/etdfftytg.php.xdomain.jp/public_html/session3.php on line 20

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

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

    • ベストアンサー
    • PHP
  • セッションの破棄

    お世話になります。 現在セッションを使用してのPHPプログラムのコーディングに取り組んでおりますが、 なんとなくですがセッションのことはつかめつつあります。 そこで、基本的な質問になるのですが教えてください。 1.セッションは必ず破棄しないといけないのか。 私の想像としては、一定時間(20分くらいだったような…)またはブラウザを閉じたときにセッションが破棄されるものと思っていました。 ですが、ある掲示板で 「セッションが不要になった段階でセッションを破棄してください。  これをしないとサーバ上にセッションデータ(ファイル)がたまっていきます。」 という記述を見つけました。 必ずセッションというものは破棄しないといけないのでしょうか。

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

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

    • ベストアンサー
    • PHP
  • セッションの破棄

    いろいろとセッションの破棄を試みているのですがうまくいきません。 最初のページで setcookie("order",session_id()); として数ページこの情報を確認する形でページ遷移させています。 最終ページの処理の末端で session_start(); $_SESSION = array(); if (isset($_COOKIE[session_name()])) {   setcookie(session_name(), '', time()-42000, '/'); } session_destroy(); としています。 ところがセッション情報が消えていないためリロードするとメールが再送信されたり完了ページが表示されたりします。 なぜでしょうか?いろいろな情報を参考にしているのですが上手くいきません。 よろしくお願いします。

    • 締切済み
    • PHP
  • 完全なセッション破棄をしたい

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

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