セッションの使い方

このQ&Aのポイント
  • セッションを利用して値を保持し、他のページで値を変更する方法について教えてください。
  • a.phpでセッションに値を設定し、b.phpで値を変更しましたが、c.phpで確認すると値が変わっていません。どうすれば値を変更できるでしょうか?
  • セッションで一度設定した値を他のページで変更する方法を教えてください。
回答を見る
  • ベストアンサー

sessionの使い方

詳しい方がいましたら、ご教授下さいませ。 ---a.php--- <?php if(!isset($_SESSION['n']) {  session_start();  $_SESSION['n']='1'; } ?> ---------- ---b.php--- <?php session_start(); $_SESSION['n']='2'; ?> ---------- ---c.php--- <?php session_start(); echo($_SESSION['n']); ?> ---------- a.phpで、'1'をセットして保持し、 b.phpが動作したとき、'2'に入れ替えているのですが、 c.phpで確認すると、何故か'1'のままです。 一度セットした値を、入れ替えることって出来ないのでしょうか?

  • THUBAN
  • お礼率76% (771/1002)
  • PHP
  • 回答数2
  • ありがとう数8

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

  • ベストアンサー
  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.2

> javascriptのonclickで、変数の値を入れ替えるように記述しており、 > (snip) > ・・・ onclick='<?php $_SESSION['n']='1';?>' ・・・・ > という感じの記述です。 あの(^^;それは当たり前です(笑) ただ一点違うのが > ブラウジング時にjavascriptがセットされる時点で ではなく <?php $_SESSION['n']='1';?> で、$_SESSIONに登録されているわけです。 この違いは理解できるでしょうか? PHPはサーバーサイドスクリプトです。 JavaScriptはクライアントサイドスクリプトです。 JavaScriptで記述したから$_SESSIONがセットされたのではなく、Onclick時に呼び出した「PHPの記述」により、$_SESSIONがセットされたのです。 PHPはサーバーサイドスクリプトであるため、$_SESSIONに新たな値を登録したければ、いったんデータをサーバーに送らなくてはなりません。 おそらくラジオボタンか何かで、クライアントが選択した値を$_SESSIONに登録したいのだと思いますが、本来予定していた動きをさせたいのであれば、「クライアントがラジオボタンを選択したという情報」をいったんサーバーに送らなくてはなりません。 ということで、(私が勝手に予想したことですが(^^;)現状のやり方はナンセンスだと思います。

THUBAN
質問者

お礼

自己解決しました! cookie.jsを用いて、javascriptでクッキー変数に書き込み、 その値をPHPのクッキーで読み取ることができました。 どうもお騒がせしました&ありがとうございました。

THUBAN
質問者

補足

ありがとうございます。 PHPはサーバーサイドスクリプトです。 JavaScriptはクライアントサイドスクリプトです。 というのは、理解しているのですが、onclickで、<?php $_SESSION['n']='1';?>が実行されるわけではないということですね。 (この件以外でも、どうもPHPとJavaScript間での値の受け渡しで悩むことが多いです) ブラウザ表示のデザインを変えたくないので、JavaScriptのonclickで、PHPのセッションの変数値の入れ替え(クッキー変数でも良い)が出来る方法はないですかね? 何故、PHPのセッションの変数値をわざわざ使うのかというと、他のPHPソース内で、この変数値を見て、初期設定される値の判定をする箇所が存在するからです。 もし、ご存知であれば、ご教授下さいませ。

その他の回答 (1)

  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.1

---b.php--- <?php session_start(); $_SESSION['n']='2'; echo $_SESSION['n']; ?> とすれば、どう表示されますか?

THUBAN
質問者

お礼

自己解決しました! cookie.jsを用いて、javascriptでクッキー変数に書き込み、 その値をPHPのクッキーで読み取ることができました。 どうもお騒がせしました&ありがとうございました。

THUBAN
質問者

補足

2 と表示されます。 その後、原因がつかめたのですが、javascriptのonclickで、変数の値を入れ替えるように記述しており、ブラウザ表示しただけで一番最後のonclickのところで上書きされてしまっているようです。 どうやら、ブラウジング時にjavascriptがセットされる時点で、マウスクリックしていないのに、変数に代入されているようです。 ・・・ onclick='<?php $_SESSION['n']='1';?>' ・・・・ という感じの記述です。

関連するQ&A

  • sessionの値が処理できない。

    次のようなセッション管理のコードですが、値($mydata)が保存されません。 ですので取得もできません。 /tmp 内には sess_ca0c8xxxxxx という風な ファイルが作成され アンダスコア以降はecho "セッションIDは{$id}です\n"; で表示される $idに一致しています。ファイルの中身は、mydata|N; という感じです。 下のPHPの動作結果はいつも"ありません。"となりますが、これは どこがおかしいのでしょうか? phpの設定なのかapacheの設定なのか・・・ OSはFedora Core2 Apacheは2.0 です。 よろしくお願いします。 '-------SESSION PUT------------------------------------------- <?php session_start(); session_register("mydata"); $mydata = 120; ?> <a href="sessionget.php">sessionget.phpにジャンプ</a> '-------SESSION GET------------------------------------------- <?php session_start(); echo "セッション内のデータは"; if ( isset($mydata) ){ echo "{$mydata}です。<br>\n"; } else { echo "ありません<br>\n"; } $id = session_id(); echo "セッションIDは{$id}です\n"; ?>

    • ベストアンサー
    • PHP
  • セッション変数の受け渡しができない

    a.php: <?php session_start(); $_SESSION['test'] = "ok"; echo "<html><body>\n"; echo "<pre>\n"; var_dump($_SESSION); echo "</pre>\n"; echo "<a href=\"./b.php\">結果ページへ</a>"; echo "</body></html>\n"; ?> b.php: <?php session_start(); echo "<html><body>\n"; echo "<pre>\n"; var_dump($_SESSION); echo "</pre>\n"; echo "</body></html>\n"; ?> a.php の表示: array(1) { ["test"]=> string(2) "ok" } 結果ページへ b.php の表示: array(0) { } 再読込みでも同様です。 php.ini の Session 関係の項目は書籍やウェブサイトを参考にしておかしなものはないと自己判断していますが、指摘されるものを掲載します。

    • 締切済み
    • PHP
  • セッションについて教えてください。

    PHPを独学で勉強中の初心者です。(HTMLとCSSくらいしか分からない所からのスタートです) ログインフォーム→パスワード処理→コンテンツ表示というながれで作っています。 質問は、セッションの有効期限はデフォルトではブラウザを閉じるまでと聞いたのですが、それはウインドウを閉じるではなく、アプリケーションを終了するまでということでよいのでしょうか?ウインドウを閉じただけだと、コンテンツを表示できてしまいます。 また、コードがこんなんでよいものかアドバイスよろしくお願い致します。 --パスワード処理-- <?php session_start(); $id =p; $password =11; $n_id = $_POST["n_id"]; $n_password = $_POST["n_password"]; if(($n_id == $id ) && ($n_password == $password)){ $_SESSION['pass'] = 1; header("Location: page1.php"); }else{echo "IDまたはパスワードが違います。"; } ?> ----コンテンツページ----- <?php session_start(); if(isset($_SESSION["pass"]) && $_SESSION["pass"] == 1){ echo "コンテンツ"; echo "<html><head> <meta http-equiv=Content-type content=text/html; charset=EUC-JP> </head><body>"; echo "<form action =logout.php method=post>"; echo "<input type=submit name=sbm value=ログアウト>"; echo "</form></body></html>"; }else{ header("Location:login1.php"); } ?>

    • 締切済み
    • PHP
  • セッション変数にデータをセットする

    下記のPHPプログラムについて 1 <?php 2 // セッションを開始する 3 session_start(); 4 ?> 5 <html> 6 <head> 7 <title>セッション変数にデータをセットする</title> 8 </head> 9 <body> 10 <?php 11 // セッション変数にデータをセットする 12 if (!isset($_SESSION["name"])) { 13  echo "<p>セッション情報をセットしました"; 14  $_SESSION["name"] = "田中"; 15  } 16 echo "<p>名前:".$_SESSION["name"]; 17  18 // セッション変数にデータをセットする 19 if (!isset($HTTP_SESSION_VARS["name2"])) { 20  echo "<p>セッション情報をセットしました"; 21  $HTTP_SESSION_VARS["name2"] = "高橋"; 22 } 23 echo "<p>名前:".$HTTP_SESSION_VARS["name2"]; 24 25 ?> 26 </body> 27 </html> 実行すると 名前:田中 名前:高橋 となるのですが、なぜ13行目、20行目のecho文の内容が出力されないのか不思議です。 echo文の内容が表示がされない理由ついて教えてください。 よろしくお願いします!

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

    PHP5.3.14を使っています。 セッションについて勉強中です。 セッションを使ってページの表示回数をカウントアップするソースと、 そのセッションを破棄するソースの2種類を用意しました。 ※それぞれ、session_id()をecho表示しています。 クッキーを使った状態でこれらを動かすと、 リセットする(リンクを押してリロードする)度にセッションIDが変わるのですが、 クッキーを使わずに定義済み定数SIDを使って動かすと、 カウント値は元に戻るのですが、 リセットしてもセッションIDが変わりません。 どうすれば、新しいセッションIDを発行(SIDの値を更新)できるのでしょうか? よろしくお願いします。 【以下、ソース2種類と、iniファイルの一部です】 ●up.php <?php session_start(); if (empty($_SESSION['count'])) { $_SESSION['count'] = 1; } else { $_SESSION['count']++; } echo ("###".'"'.session_name().'='.session_id().'"'."</br>"); ?> <p> <?php echo $_SESSION['count']; ?> 回目。 </p> <p><a href="up.php">カウントアップ</A> </p> <p> <a href="reset.php">リセット</A> </p> ●reset.php <?php session_start(); echo ("###".'"'.session_name().'='.session_id().'"'."</br>"); echo ("##### ". $_SESSION['count']."回表示しました。</br>"); $_SESSION = array(); if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } if(isset($_REQUEST[session_name()])){ $_REQUEST[session_name()]="" ; } session_destroy(); ?> <p> <a href="up.php">初めからカウントする</A> </p> ●php.ini (クッキーを使わずSIDを使うを設定) session.use_trans_sid = 1 session.use_only_cookies=0 session.use_cookies=0

    • 締切済み
    • 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
  • 携帯で$_SESSION関数を利用する場合

    PHP初心者です。 質問内容や表現に過不足がありましたら、申し訳ございませんが、ご指摘下さい。 PHP4を利用し、携帯で閲覧可能なサイトを作ろうとしています。 a.phpからform上のボタンをクリックするとb.phpを呼ぶというプログラムを作りました。 PCでは動作しているのに、実機(i-modo)で確認するとどうしてもb.phpに移動してくれません。 どうやら$_SESSION関数に入れているデータが携帯の場合には消えてしまっているようなのです。 ソースは次のように組んでいて、途中、echoで表示して確認したところ、PCでは「1」と表示されるのに携帯では「」と何も表示されません。 次行のIF文にひっかかって、a.phpに戻ってしまっているようです。 最近の携帯では$_SESSION関数を利用できる、という話も見かけたのですが、使わずに作った方がよいのでしょうか? 回避策をご存知の方、ご教授頂けると助かります。 //------↓以下ソース例示------ a.php <?php ・・・・・・・・ session_cache_limiter('nocache'); session_start(); $_SESSION['c_flg'] = 1; ・・・・・・・・ <FORM action="b.php?SID" method="POST"> ・・・・・・・・ ?> b.php <?php ・・・・・・・・ session_start(); echo $_SESSION['c_flg'] ; //←ここで携帯の場合何も表示されない if ($_SESSION['c_flg'] != 1 ){ header("Location: http://" . $_SERVER["S"].dirname($_SERVER["R"]) . "/a.php/"); // ↑↑b.phpを直接呼ぶと必ずa.phpが表示されるようにしたい。↑↑ exit; } ・・・・・・・・ ?>

    • ベストアンサー
    • PHP
  • セッションの利用

    今,セッションにはまっています. https://www.stackasterisk.jp/tech/php/php03_06.jsp には、セッションのサンプルもいくつかあるので,まずは,簡単なセッションを使った例を拾ってきて試してみたいと思っています.ですが、上のURLにあるサンプルで <? session_start(); if (!isset($count)) $count=0; session_register("count"); $count++; ?> <html> <body> あなたは <?= $count ?> 回目の訪問です。 <a href="<?echo $PHP_SELF ."?PHPSESSID=". $PHPSESSID?>">カウントを増やす</a> </body> </html> をしましたが,再読込やクリックをしてもカウントアップせず,ずっと1のままです.ソースが間違っているかどうかは私には,ハッキリできませんが,おそらく正しいんでしょう.正常にカウントアップされる為には,php.iniなどの設定も必要でしょうか?どうしてカウントアップされないでしょうか?

    • ベストアンサー
    • 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
  • セッションに関して

    お世話になっております。 ここ数日、セッションの勉強をしているのですが、 http://www.stackasterisk.jp/tech/php/php03_06.jsp のサイトにある下記スクリプトを動かしてみました。 <?php session_start(); if (!isset($count)) $count=0; session_register("count"); $count++; ?> <html> <body> あなたは <?= $count ?> 回目の訪問です。 <a href="<?echo $PHP_SELF ."?PHPSESSID=". $PHPSESSID?>">カウントを増やす</a> </body> </html> すると、はじめに表示させた際、何やら0行目が原因とのエラーが表示され(初めだけだったので、内容を確認出来ませんでした。)、それ以降、エラーはないものの、カウントが増えずにいる状態です。 初歩的なこととは思いますが、上記サイトでは、不具合があった場合は想定しておらず、何処が可笑しな設定なのかが分からないのです。 また、サイト内にて、「count という変数の値は、 (デフォルトでは) /tmp に sess_ で始まるファイル名で保存」との説明がありますが、これはCドライブ内にあるtmpフォルダを指しているのでしょうか? カウンタが増えない事からファイルが生成されていないのでしょうが、PHPを触り始めて間もない私にとって全てが専門用語の説明に、色々と調べるが故にポイントが見えなくなっている状況です。 初歩的な質問でお恥ずかしい限りでは御座いますが、エラーが表示された原因、正常に動かない(カウントが増えない)原因。そして保存策フォルダの場所をご教授頂ければ幸いです。 宜しくお願い致します。 動作環境 winXP apacha1.3 PHP4.3 本も購入しているのですが、初歩的なことは割愛されているもので・・・宜しくお願い致します。

    • ベストアンサー
    • PHP

専門家に質問してみよう