セッション変数の破棄と再設定

このQ&Aのポイント
  • セッション変数を破棄する方法と再設定する方法について悩んでいます。破棄する際に一部の変数を保持する方法を試しましたがうまくいきませんでした。他に良い対応策はありますか?
  • セッション変数を破棄する方法について考えています。一部の変数を保持しながら破棄する方法を試しましたが、再設定ができないようです。他に効果的な対策はありますか?
  • セッション変数を破棄し、一部の変数を保持したいと考えています。しかし、破棄後に再設定ができないようです。より良い対策があれば教えてください。
回答を見る
  • ベストアンサー

セッション変数の破棄と再設定

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

  • jo_
  • お礼率100% (21/21)

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

  • ベストアンサー
  • LemonT
  • ベストアンサー率49% (39/79)
回答No.1

こんにちは。 (1)について Abandon メソッドを呼び出すと、実際に削除されるのは現在のページのスクリプト コマンドの処理がすべて完了した時点です。 つまり、Abandon を呼び出したページ内であれば Session オブジェクト内の変数にはまだアクセスすることができますが、その後の Web ページではアクセスできなくなります。 Application変数に退避したら、いかがですか?

参考URL:
http://www.microsoft.com/japan/developer/library/jpiis/iishelp/iis/asp/vbob5tpq.htm
jo_
質問者

お礼

早速の回答ありがとうございます。 現在作成中のサイトで確認してみたところ、 確かに、Abandonを呼び出したページ内では セッションに値が残っていました。 更に、別のページへ飛んだ時点でなくなってしまうと いうことも確認できました。 また、アドバイス頂いたのに恐縮ですが、 今回削除したいセッション変数というものが、 サイトを覗いた方が入力した個人情報に当たる部分なので Application変数にはちょっと入れられないな・・・という 感じです。 ということで、Abandonによるセッションのクリアは 言語の仕様、システム的な仕様からも無理がある ようなので、やめて(2)の方法で行こうと思います。 ありがとうございました。

関連するQ&A

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

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

    • ベストアンサー
    • PHP
  • phpのセッションについて質問です

    phpで会員制サイトの制作を勉強中です。 pdoでmysqlデータベースに接続しています。 セッションの「session_set_cookie_params」について質問ですが、 session_set_cookie_paramsで有効期限を設定する場合、 ログイン時にsession_set_cookie_paramsでセッションの有効期限を設定し、 他のページではsession_start()さえ記述すれば、 有効期限を過ぎると勝手にセッション変数のデータを空にしてくれるのでしょうか? それとも全てのページにsession_set_cookie_paramsを書かなければならないのでしょうか? プログラムを書いている上でセッションの動作がおかしい(有効期限が過ぎてもログアウトしない)のでsession_set_cookie_paramsの記述がおかしいのかと思い、質問しました。 また、セッション変数の有効期限を変数毎に個別に設定して削除する方法はないのでしょうか? ご回答、よろしくお願いします。

    • ベストアンサー
    • PHP
  • ホスト名に"_"を含む場合のSession変数維持

    Windows 2000 Server環境を使用しています。 サーバーのホスト名に"_"を使用しており、ASPにてCookieが使用できないことを知りました。 単純にホスト名を変更すればよいのですが、他のアプリでも使用しており、変更することが難しいのが現状です。 Session変数がダメならとDimで試してみましたが、ページが偏移すると値は破棄されてしまいました。 ホスト名を変更せずにSession変数(またはDim)の値を維持させる方法はありませんでしょうか。 なお、Application変数は通るのですが、ユーザーごとに値が格納できないためNGとなりました。 宜しくお願いいたします。

  • PHP SESSION 設定について

    PHP(レンタルサーバー:5.3.6)(ローカル:5.3.26)を使用しています。 簡単なログインフォームを作っていました。 ローカルでテスト運用したところ、問題なく動作していたのでレンタルサーバーにアップロードしたところ、SESSIONが動いていない(?継承していない?)ことに気づきました。 そこでphpinfoを確認すると レンタルサーバーは、 session.cookie_httponly=1(On) session.cookie_secure=1(On) になっていました。XSS攻撃に全部ではないけどレンタルサーバーの設定だと有効だということなので、ローカルもレンタルサーバーの設定に合わせたいと思っています。 ※設定をoffにすると問題なく動作します。 sample2.phpで、「$_SESSION['sample_title']」が表示されなくなってしまいました。 どのようにすれば、sessionが正しく動作するかご教授お願いいたします。 抜粋スクリプト ■sample1.php session_start(); session_regenerate_id(TRUE); $_SESSION["sample_title"] = "PHPのSESSION"; //セッション登録 echo "$_SESSION['sample_title']に代入した値は「<?php echo $_SESSION['sample_title'] ?>」です。"; echo "<a href = 'sample2.php'>次のページ</a>"; ■sample2.php session_start(); session_regenerate_id(TRUE); echo "受け取ったセッション変数の値は「".$_SESSION['sample_title'] ."」です。";

    • ベストアンサー
    • PHP
  • JSPでsession変数が勝手に書き換えられる

    お世話になっています。 JSPを使ってプログラミングをしていますが、画面遷移の途中でsession変数の内容が空になってしまう現象に悩まされています。 画面遷移は、 ■入力画面 <jsp:useBean id="apply" scope="session" class="apply.Apply2009Bean" /> ↓post ■確認画面(ここで、前の画面で入力された値をsessionに保存) <jsp:useBean id="apply" scope="session" class="apply.Apply2009Bean" /> ↓post ■申し込み完了画面(入力された値をDBに保存) <jsp:useBean id="apply" scope="session" class="apply.Apply2009Bean" /> ここで、申し込み完了画面になるとapplyという変数の中が全部nullになっています。 念のため暗黙のsession変数からgetId()でセッションIDを画面に出してみると<%=session.getId()%> 申し込み画面:585C94623773F49C0708E050C95E20D2 確認画面:5C35DCF1B68850A762D531CAF2F9700E 完了画面:7D1035FD035C7767C8CEB1D938325D60 と、毎回セッションIDが変わっています。  ちなみに、テスト環境ではこの問題は起こらず、本番環境のみで発生します。  同様の問題を経験したことがあるかたはいらっしゃいませんでしょうか。 構成は ■テスト環境: os:WindowsXP SP2 server:Tomcat 4.1 Java: 1.4.2 ■本番環境: os:FreeBSD 6.1-RELEASE-p6 server:Tomcat 4.1 Java: 1.4.2  よろしくお願いいたします。

    • ベストアンサー
    • Java
  • セッションについて

    現在phpとMysqlで認証後、認証時に入力したID名のディレクトリを自動で作るシステムを作っています。 しかし、ID名のディレクトリにファイルをアップロードしたいのですが、なぜか指定よりひとつ上の階層にファイルが保存されてしまいます。 考えられることを以下に記します。 1、セッションがうまく渡ってきておらず、指定先のセッション変数が空である。 2、関数の使い方が間違っている。 この他に理由があるのかもしれません。 アップロード指定ディレクトリは以下のように指定しています。 $username = $_POST['user']; $_SESSION['username'] = $_POST['user']; $file_dir = "c:/xampp/htdocs/report/$username"; ちなみに認証時のID名のディレクトリを作るプログラムは以下の通りです。 <?php session_start(); $dirname = $_POST['user']; $_SESSION['dirname'] = $_POST['user']; $path = "c:/xampp/htdocs/report/$dirname"; if(!file_exists($path)){mkdir($path);} ?> こちらもセッション変数を利用しているので同じようにしたら 大丈夫だと思っていたのですが・・・ お分かりになる方ご回答お願いいたします。

    • 締切済み
    • PHP
  • sessionについて

    こんばんは。お世話になっております。 題名にあるようにセッションに関してアドバイスいただきたく投函させて頂きます。 (他に似たような質問はあったものの、上手く解釈できなくて・・) 現在、DBに登録された会員のみがログイン出来る機能を有したサイトを作成しておりますが、DB参照の後、idなどを、セッション変数に代入し、そのデータを持ち歩いています。 書籍や他の方からセッションIDのことを耳にしますが、いまいち、その必要性というものを理解する事が出来ないのですが、このセッションIDは、どこでどういったところで必要になってくるものなのでしょうか? また、チェックボックスなどで任意により、自動でログインする機能を持たせるとした場合、クッキーを用いるという事までは理解したのですが、調べた範囲では、先のセッションIDをクッキーに保存させる・・という内容を多くみました。 現在、セッションハイジャックを避けるようサーバー側に保存されるセッションIDを書き換える設定をしているのですが、このような場合はクッキーを用いての自動ログインはどうしたらいいのだろう?と糸口が見えずにいる次第です。 以下、アドバイスを頂戴したいことをまとめると、 1.ログイン状態を認識させるためには、セッション変数だけで事足りるのか?また、この場合においてのセッションIDの意味するとは? 2.セッションハイジャックを避けるためサーバー側に保存させるセッションIDを随時変更している場合、自動ログイン機能を用いるには、どのような流れ(内容)になるのか? です。お忙しい中恐縮ですが、アドバイスなど頂けたら幸いに思います。宜しくお願い致します。

    • ベストアンサー
    • PHP
  • ASP.net MVC セッションハイジャック対応

    どうにも困ってしまい初めて質問させていただきます。 現在、ASP.NET MVC 2.0で運用保守しているモバイル会員向けのサイトがあります。 従来のWeb.Configは <sessionState mode="InProc" timeout="30" regenerateExpiredSessionId="true" cookieless="true"/> のようにしており、URLにセッションIDが表示されるように設定されていました。 これがセキュリティ上問題ということで、ログインの前後でセッションIDを変更することになり、 ログイン処理時に Session.Abandon(); を実行して、セッションを破棄して、ログイン後のページでセッションIDが変更するようにしており これはうまく想定通りにいっていました。 その後、最近スマフォのアクセスの方が増えてきたこともあり、極力URLにセッションIDは表示したくないということでWeb.Configを以下のように変更しました。 <sessionState mode="InProc" timeout="30" regenerateExpiredSessionId="true" cookieless="AutoDetect"/> スマフォやPCからのアクセスでは想定通りURLにセッションIDが表示されることもなく、 ログイン前後でセッションIDが変わりました。 しかし、クッキー非対応の携帯で確認すると、URLに表示されるセッションIDが ログイン前後で変更されなくなってしまいました。 iモードシュミレータを使いデバッグ実行で直接セッションIDを確認しても、 やはり変わっていませんでした。 AutoDetectでクッキー非対応の端末でセッションIDを変更する方法はあるのでしょうか? いろいろ調べたのですが直接関係するような内容は見つけることができず、 質問させてもらいました。 よろしくお願いします。

  • 検索フォームのセッション管理について

    PHPを利用して検索フォームから入力された値を取得し、 条件にあった画面を表示しているのですがページを戻る際に警告が出て うまく戻れません。 流れ 1,フォームから値の取得 ⇒  2,送られた値を【$a】で受け取り、セッション変数に代入、条件にあったデータの表示(select * from sample where aaa like【$a】) ⇒  3,もしフォームの値が空でセッション変数に値があれば、セッション変数を【$a】に代入し条件にあったデータの表示 ⇒  4,フォームの値、セッション変数共に空ならセッション変数を削除し、他のページに飛ばす 5,新たにフォームから値が送られた場合は値を上書きする 以下が書いたコードです。 session_start(); if(isset($_POST["test"])){ $a = $_POST["test"]; $_SESSION["test"] = $a; }elseif($_POST["test"] == "" and isset($_SESSION["test"])){ $a = $_SESSION["test"]; }else{  unset( $_SESSION["test"] );  if (isset($_COOKIE["PHPSESSID"])) {   setcookie("PHPSESSID", '', time() - 1800, '/');  }  session_destroy();  header( "Location: /top.html" );  exit(); } 以下で【$a】を使いsql文を組み立て、データを表示しています。 このコードだと前のページに戻る際firefoxでは 【このページを表示するにはフォームデータを再度送信する必要があります。フォームデータを再送信すると以前実行した検索、投稿や注文などの処理が繰り返されます。】 と表示され、IEでも 【警告 : ページの有効期限切れ 要求したページは、フォームで送信された情報を使用して作成されました。このページは、もう利用できません。セキュリティ保護のため、情報は自動的には再送信されません。 情報を再送信し、この Web ページを表示するには、ツール バーの [更新] ボタンをクリックしてください。】 と表示されてしまいます 上記のコードをどのように変更すれば警告をださず行いたいことに記述したようにできるのでしょうか? ご教授ください。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • セッションに関して質問が御座います、

    現在、ログイン関係のプログラムのテストをPHPにて製作しています。 PCと携帯電話に対応させるためセッションを状況によって使い分けるようにしました、 内容としては↓ (1)クッキーが使えるか判断する→使える場合は普通にセッションスタート。 (2)クッキーが使えない場合は40桁の0~9、a~b、A~Bの乱数を生成してセッションIDとしてセッションスタート。 以上の二つを行ってセッションをスタートさせる事にしました。 (1)の方は問題なく動作しましたが問題なのは(2)の方です。 ランダムな値をセッションIDにセットしてセッションスタート、同時にセッションに値を入れてセッションIDをGETで送信、 受け取り側ではGETでセッションIDを受け取ってそのIDでセッションスタートするのですがセッションに入れた値が上手く取れません、恐らく空になっていると思われます。 受け取り側の方でセッションをスタートさせた状態で「session_id()」を使い確認したところ設定したセッションIDは問題なく表示されています、 これはセッションスタートは問題なく行えたと考えて宜しいのでしょうか? また、セッションに値を入れる時も取り出す時も(1)と(2)は同じ方法です、違うのはセッションスタートの時だけです。 (ランダムな値をセッションIDにセット、GETでセッションIDを受け取った場合はそのセッションIDでセッションスタート) テストではAUはCookie使用可能だったので問題なし、DoCoMoではCookie使用不可なので動作せず、しかしサーバー環境によって正常に動作します。 一部のサーバーでは正常に動作するのでプログラム自体は問題無いと思うのですが……。 良い解決策などありましたら教えて下さい、宜しくお願い致しますm(_ _)m

    • ベストアンサー
    • PHP

専門家に質問してみよう