• 締切済み

PHPのセッション変数 絞り込み検索

PHP Version 5.1.6 flash actionscript2.0 最初の検索条件をセッション変数['first']に保存し、 (GETにより、種別を判断しています。 ~~/index.php?kind=A&value=1という形) 絞込検索時(値はページ内のチェックボックスからPOSTで受け取り、hiddenタグで、type=newを受け取ります。)に 最初の検索条件をセッション変数['first']から取り出すようにしています。 また絞り込み検索時でなければ、とりあえずいったん保存用の セッション変数['first']を初期化しています。 ここで、ページ内にフラッシュのNEWというボタンがあり、その中に var kind = "new"; get_URL("http://~~/index.php", "_blank","GET"); とだけ記述して、ページへkind=newという検索種別を渡すように しているのですが、挙動がおかしくなる場合があります。 [正常な動きをする場合] 1、ページ内のNEWのフラッシュボタンを押す。 予想通りの最初の検索ができる。 (この時点で、セッション変数['first']に"new"が入っているのは 確認済みです。) 2、ページ内のチェックボックスで、絞込み検索をかける。 予想通り、最初の検索条件+絞り込み条件を加えた検索ができる。 [異常な動きをする場合] 1、ページ内のリンクから最初の検索をする。 (~/index.php?kind=A&value=1)を押す。 (この時点で、セッション変数['first']に"A"が入っているのは 確認済みです。) 2、ページ内のチェックボックスで、絞込み検索をかける。 予想通り、最初の検索条件+絞り込み条件を加えた検索ができる。 3、ページ内のフラッシュのNEWボタンを押す。 予想通り、再度別条件での検索ができる。 4、ページ内のチェックボックスで、絞込み検索をかける。 なぜか、セッション変数['first']に、"A"が入ったままになっている。 よって、2の検索に変わってしまう。 ただし、このフラッシュボタンからではなく、たとえば ~/index.php?kind=new というGETで送るタイプのリンクからでは、予想通りの動きをします。 このあたりの挙動につきまして、ご教授いただければ幸いです。 下記コードです。(処理に関係ない部分は省略しております。) session_start(); session_register("first"); //パラメータを受ける。 //絞込検索でなければ、セッション変数を初期化 if($_REQUEST['kind'] != "more") { unset($_SESSION['first']; } switch($_REQUEST['kind']){ case "A": $_SESSION['first']= "A"; break; case "new": $_SESSION['first']= "new"; break; //絞込み検索 case "more": break; }

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

みんなの回答

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

No1回答のものです。前回最後に提示した参考サイトにもあったけど、ブラウザでcookieの扱いがちがう可能性はありそうです。 あと、「IE cookie」で検索してみたら、IE6でセキュリティ設定の変更もあるみたいです。 通常のページとflash で何が違うのかよくは解りませんが。 http://mroom.cool.ne.jp/windows/ie6/index.html cookie内容チェックに IECookieViewという便利なソフトがあるようです。 http://www.xucker.jpn.org/pc/iecookieview_install.html

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.1

cookie 保存対象path が違うのでは? たぶん、flash の方が深いところにあって、そのpathでcookie登録するため、sessionが別物になっていると予想されます。 firefox や opera などのブラウザで、現在保持中のcookie 情報を確認してみて下さい。 ieでは、メモリ上のcookie(保存期限ブラウザ終了まで)を見る方法はないので。 path違いで、2重登録されてると思います。 session_start前に、以下で設定できます。 session_set_cookie_params ( $lifetime, $path, $domain, $secure, $httponly ); http://jp.php.net/manual/ja/function.session-set-cookie-params.php $path='/' がいいかというと、そうとも云えないので、以下も参考にしてください PHPのアキレス腱 ── セッション管理|gihyo.jp … 技術評論社 http://gihyo.jp/dev/serial/01/php-security/0025?page=2

letlet2002
質問者

補足

参考サイトを教えていただきありがとうございます。 モダンブラウザでの動きを確認しておりませんでしたので、 firefoxで挙動を確認したところ、予想通りの動きをしました。 IE7、8でのみおかしな動作をする模様です。 session_set_cookie_paramsにて設定をしてみましたが、 IEでは挙動はおかしいままでした・・・ ブラウザ依存するのでしょうか??

関連するQ&A

  • PHPのセッション変数について

    ページの構成が代わり、A-B-Cと順番だったのをA-Cと変更しました。 AからCリンクにとぶように設定したのですが、リンクを変更していてもBのページに行ってしまいます。 このプログラムを作った人に聞きましたところ、 if{session("user_sbt") というセッション変数で、新しく作られた画面のところで何もセットしていなければ初めの画面(B)に戻るというプログラムが走っているそうです。作った人に直してもらえたら良いのですが、事情で日本にはいないので、わかる方教えてください。よろしくお願いします。 PHPファイルの上部には session_start(); require_once("../_common/head.php"); require_once("../_common/mysql.php"); というセッション変数が記入されています。

    • 締切済み
    • PHP
  • phpを使って、絞り込み検索、条件検索のページを作りたい.

    phpを使って、絞り込み検索、条件検索のページを作りたいのですが、全く分からないのです。 どんなファイルをどこにアップしたらいいのかなど、細かく教えていただけると幸いです。 http://www.eloan.co.jp/m/loanlist.php?DID=4&init=1 のページのようなものが作りたいです。(モバイルページ)

    • 締切済み
    • PHP
  • phpでSESSION変数の管理

    今私は、phpでページ間で変数をやり取りできる処理を作成しています。処理的には、ページAのテキストボックスtitleとテキストエリアsyosaiに入力された値をデータベースに追加し、ページBに画面を移動させるようにしたいと考えていますが、入力した値がnullになってしまい困っております。 ソースは以下のとおりです。 全部は書けませんので、怪しい部分だけ書きます。質問などがありましたら、その都度指摘をお願いします>△</ ページA ソース <form action="B.php" method="post"> <input type="text" name="title" value=""> <TEXTAREA name="syosai" cols="70" rows="10"> <input type="submit" name="b1" value="ページBへ"> <?php session_start(); if(!isset($_SESSION['title2']) || !isset($_SESSION['syosai2'])) { $_SESSION['title']=$_POST['title']; $_SESSION['syosai']=$_POST['syosai']; }else{} try{ $pdo = new PDO("mysql:host=localhost; dbname=****","****","****"); $stmt = $pdo->prepare("INSERT INTO user(clandername , syosai) VALUES(:rere3, :yuyu5)"); $stmt->bindValue(":rere3", $_SESSION['title']); $stmt->bindValue(":yuyu5", $_SESSION['syosai']); $stmt->execute(); }catch(PDOException $e){} ?> ページB ソース <form action="A.php"> <input type="submit" name="name" value="ページAへ" style="WIDTH: 70px; HEIGHT:50px"> <?php session_start(); ?> よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • $_SESSIONの取りだし方、使い方PHP

    質問失礼いたします。 【1.html】から【A.php】に$_POSTされた値を、$_SESSIONにて下記の通りに格納しています。 $name = $_POST['name']; $_SESSION['name'] = $_POST['name']; $address = $_POST['address']; $_SESSION['address'] = $_POST['address']; $gender = $_POST['gender']; $_SESSION['gender'] = $_POST['gender']; そして、上記の$_POSTされた値を使って、データを検索し20件ずつ表示させて改ページを行っています。 <?php if ($page > 1) { ?> <li><a href="search2.php?page=<?php print($page - 1); ?>">前のページへ</a></li> <?php } else { ?> <li>前のページへ</li> <?php } ?> <?php if ($page < $maxPage) { ?> <li><a href="search2.php?page=<?php print($page + 1); ?>">次のページへ</a></li> <?php } else { ?> <li>次のページへ</li> <?php } ?> 違うかもしれませんが、 アドレスに  &name=○&address=○&gender=○  という風にして、次のページではアドレスにある値を使う みたいなこととは思うのですが、   &name=<?php print($name; ?> とすると、アドレスでは  &name=Array となってしまいます。 セッションに格納した検索条件を次のページにも使うようにはどのようにすればよいのでしょうか。 また、上記の次ページのアドレスに、  &name=○&address=○&gender=○  と表示しないようなやり方もあるのでしょうか?

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

    PHPのセッションについてお尋ねします。 1ページ目でテキストボックスに値を入力させ、ポストで送信。 2ページ目でポストを受け取り、項目が正しく入力されているかチェック。 3ページ目でMySQLに書き込み というシステムを作りかけています。 2ページ目までは上手くできたのですが、2ページ目の変数を3ページ目で渡すところで滞っています。 ザッと調べてみるとセッションというのを駆使して変数の受け渡しができるようなのですが、このセッションの書き方がよくわかりません。 session_start()を入れてみましたが、次のページには引き継がれていませんでした。更に記述が必要なのでしょうか? お詳しい方、詳説または詳説ページの紹介をお願いします。

  • 検索結果に対する絞込み

    お世話になってます。 検索条件で絞り込んだ結果に対して、さらに絞込みをかける方法を教えてください。 検索条件を持ち歩いてもいいのですが、30個近くあるのでセッションを使うことにしたのですが、うまくいきません。 具体的には ID 名前 住所 地区 1 山田 東京 関東  2 佐々木 東京 関東 3 鈴木 埼玉 関東 4 岡田 大阪  関西 最初に「関東」を検索条件に検索すると表示画面に3件表示されます。 セッションテスト1($_SESSION["test1"])には検索後の3件のIDを登録しました。 次に表示画面には検索条件のテキストフィールドがあり、「東京」と入力すると2件表示されます。 具体的にはセッションテスト1に値がセットされていれば $kensaku=$_SESSION["test1"]; $sql="SELECT *from test1 where ID=$kensaku and 住所=東京"; としています。 ここまでは絞込みがうまくいき表示できたのですが 戻るボタンで戻ったとき、「埼玉」といれて検索をかけると、1件表示させたいのですが $_SESSION["test1"]に値がセットされていて、 先ほど「東京」で絞り込んだ結果に検索をかけているので、表示されません。 不動産などのサイトを見るとパラメーターで渡しているのですが、セッションを使う方法ではできませんでしょうか。 わかりにくい文章で申し訳ないのですが、 検索結果に対して、さらに検索を何度もかけるという方法を教えていただければ助かります。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 検索フォームのセッション管理について

    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のセッションについて

    検索フォームから値を受け取り、該当するデータを表示するプログラムを作っているんですが、 session_regenerate_idを使ったセッション管理で行き詰っています。 session_regenerate_idを使うと1ページずつ進んでいく場合は、何も問題ありませんが、 現在のページからタブに複数ページを開こうとすると2つめ以降のタブ(ページ)が表示されなくなります。 おそらくsession_regenerate_idにより1つめのタブが開かれたときに、セッションが書き換えられて、 2つめのタブに正常にセッション変数が受け渡しできていないのが問題と思いますが、どのように解決したらよいのかわかりません。 セキュリティ対策をした上でページ間共有をスムーズに行うにはどのようにすればよろしいのでしょうか。 ちなみにセッションはフリーワード検索のみに使用します。

    • ベストアンサー
    • PHP
  • PHPでセッション管理

    PHPでセッション管理の勉強をしています、 テストに以下の文章があるのですが カウント2回です は表示するのですが 3回目以降も カウント2回です と表示します。 文章がどこかおかしいでしょうか? また、このセッション管理は携帯電話でも有効なのでしょうか? スミマセン、教えてください。 バージョンは MYSQL ver4.0.26 PHP ver4.2.2 です <?php session_start(); $count = 1; if (isset($_SESSION["count"])) { $count = $_SESSION["count"]; $count++; } $_SESSION["count"] = $count; ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <title>セッション変数のテスト</title> </head> <body> セッション変数のテスト<BR> <BR> <?php if ($count == 1) { ?> はじめての訪問です。<BR> <BR> セッション変数にデータがありません。<BR> このページをリロードしてください。<BR> <?php } else { ?> あなたの訪問は<?=$count?>回目です。<BR> <?php } ?> </body> </html>

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

専門家に質問してみよう