• 締切済み

SESSION受け渡し

SESSION受け渡し 毎回大変お世話になっております。 PHP初心者なので、変な質問になっているかもしれないのですが、どうか分かる方はお付き合いください。 環境 PHP 文字コード:Shift-JIS SESSION01.php から SESSION02.php へSESSIONを受け渡した場合、統一されるはずのSESSION変数($_SESSION["name"])が2つ作成されてしまい、別々の変数として扱われてしまいます。 ・ソース SESSION01.php(SESSION送信側) <?php session_start(); $_SESSION["name"] = "1"; echo $_SESSION["name"];  ←変数の中身は[1] ?> SESSION02.php(SESSION受信側) <?php session_start(); echo $_SESSION["name"]; ←変数の中身は何も無し ?> ・SESSIONのディレクトリ sess_eo683vtfgl5qk6d2o31ghcjpn7     1KB sess_nq1cikn5uhdlnc9uvii6b8l281     0KB SESSION変数($_SESSION["name"])をSESSION01.phpとSESSION02.phpの両方で同じ変数として扱いたいのですが、別々の変数の様な扱いになっております。 なぜSESSION変数が統一されていないか分かる方がいらっしゃいましたら、どうかご意見をお聞かせください。

  • PHP
  • 回答数7
  • ありがとう数4

みんなの回答

回答No.7

今後見る人のために。 > 画面遷移しなければセッションの受け渡しはできません。 > もし1人のPCで単に2つのブラウザを立ち上げただけなら、セッションの受け渡しはできません。 > 独立したセッションが2つ出来るだけです。 と書きましたが、いまどきのブラウザはそうではないようです。 つまり、別々に立ち上げてもセッションを共有しているかのようなふるまいをするようです。 以上訂正してお詫び申し上げます。

回答No.6

> セッション管理以外でクッキーが正常に機能しているかを調べる方法はどうしたらよいのでしょうか。    実際にクッキーを使ってみれば良いだけです。   例えば SESSION01.phpに setCookie("TestCookie", 126, time()+3600);   SESSION02.phpに print "TestCookie = ".Strval($_COOKIE['TestCookie'])."<br><br>";   とコードを入れた時にSESSION02.phpを開いたら 「TestCookie = 126」 とちゃんとクッキーの値が表示されるかどうかです。 また表示したブラウザでクッキーが保存されているかも調べるのも良いでしょう。

回答No.5

PHP初心者と自称しているので失礼かもしれませんが念のため初歩的なことで確認したいことがあります。 具体的にSESSION01.phpからSESSION02.phpへどうやって画面遷移してますか? SESSION01.phpからSESSION02.phpへの遷移方法としては、 Formのsubmitボタンによる遷移、 リンクによる遷移、 header(Location:url)による遷移 等いろいろあります。 画面遷移によって同一セッションの受け渡しが可能となります。 画面遷移しなければセッションの受け渡しはできません。 もし1人のPCで単に2つのブラウザを立ち上げただけなら、セッションの受け渡しはできません。 独立したセッションが2つ出来るだけです。 どうも文面から察する限りこの思い違いの可能性を捨て切れなかったので。 私の誤解であれば、ごめん。

tanaka_t
質問者

お礼

返信ありがとうございます。 返事が遅くなってしまって大変失礼致しました。 SESSION01.php から SESSION02.php への遷移はリンクによるものです。 今のSESSION01.phpの状態がこちらです。 <?php $ss_name = session_name(); session_start(); $ss_id = session_id(); echo $ss_id; $_SESSION["name"] = "1"; echo $_SESSION["name"]; echo '<a href="SESSION02.php">a</a>'; ?> リンクでの遷移としております。

回答No.4

> 「$ss_name = session_name();」をSESSION01.phpとSESSION02.phpとでechoで表示したら2ページとも「PHPSESSID」という文字列が表示されました。  これはデフォルトのまま変更されていないので問題ありません。 > SESSION01.php → fgjqrfduk2v6b46q9rag9u5180 > SESSION02.php → te9demj99aqr85if9hdcpphl31  IDの値が違うのは別のセッションだと認識されてるってことですよね。  php.iniで次の設定値がどうなっているか確認して見てください。 session.gc_maxlifetime  これはセッション情報が削除されるまでの時間(秒数)の設定値で、デフォルトでは1440になってるはずです。この値が極端に小さいとセッション情報はすぐに削除しまいます。  あと、セッション管理以外でクッキーが正常に機能しているかどうか。(設定として有効かどうかじゃなくて、実際にクッキーがちゃんと使えるかどうか)

tanaka_t
質問者

お礼

返信ありがとうございます。 返事が遅くなってしまって大変失礼致しました。 「php.ini」の「session.gc_maxlifetime」は1140となっています。 セッション管理以外でクッキーが正常に機能しているかを調べる方法はどうしたらよいのでしょうか。 POSTとGETは正常に動作しているようです。 質問ばかりしてしまい申し訳ございません。

回答No.3

#2 です。 SESSION変数の値の前に、セッションIDが正しく受け渡しされているか確認してください。 session_start(); の後で $ss_id = session_id(); とすれば、$ss_idにセッションIDの値が取得できます。 送信側と受信側で同じID値がセットされているか確認してください。ID値が違うとシステム上では別のセッションだと認識されていることになります。 念のため session_start(); の直前で $ss_name = session_name(); でセッションIDの名称が変わっていないことも確認しておいた方が良いかも。 あと、送信側の処理と受信側の処理の間でsession_destroy()等のセッションを終了するような関数を呼び出したりはしてないですよね。 【基本事項】 ●クッキーの場合 PHP側の設定と、閲覧するブラウザ側の設定の両方でクッキーが有効になってる必要があります。 ●URLパラメータの場合 PHPのソースで明示的にURLパラメータにセッションIDの名称とセッションIDの値を設定する必要があります。

tanaka_t
質問者

補足

返信ありがとうございます。 ご指導頂きました「$ss_id = session_id();」をSESSION01.phpとSESSION02.phpとでechoで表示したら別々の文字列が出てきました。 これはシステム上では別のセッションだと認識されているのでしょうか。 SESSION01.php → fgjqrfduk2v6b46q9rag9u5180 SESSION02.php → te9demj99aqr85if9hdcpphl31 「$ss_name = session_name();」をSESSION01.phpとSESSION02.phpとでechoで表示したら2ページとも「PHPSESSID」という文字列が表示されました。 送信側の処理と受信側の処理の間でsession_destroy()等のセッションを終了するような関数は呼び出してはいないです。 大変お手数ですが、どうか返答をお願い致します。

回答No.2

セッション管理が無効になってるのでは? php.iniのセッション関連の設定を確認してください。 とくに次の二つは要注意  session.use_cookies    クッキーでセッション管理する場合は1, クッキーを使わない場合は0  session.use_trans_sid    URLパラメータでセッション管理する場合は1, そうでない場合は0

tanaka_t
質問者

補足

返信ありがとうございます。 セッション管理は有効になっているようです。 色々調べていて先ほど気付いたのですが、1人に対してSESSIONは1つ作成されるのみ?だそうですが、私のSESSIONのディレクトリには1度に2つSESSIONが作られています。 SESSION1.php $_SESSION["name"] と SESSION2.php $_SESSION["name"] は別物と認識されているようです。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

可能性としてはクッキーが無効になっていてきちんとセッションIDがわたっていないとか?

tanaka_t
質問者

補足

返信ありがとうございます。 クッキーは有効になっているみたいです。

関連するQ&A

  • SESSION の受け渡し

    初心者ですので、見当違いの質問の場合はご容赦ください login.php(ユーザ認証) cart.php(ショッピングカート) という構成でSESSION変数の受け渡しを行いたいのですが login.php で認証確認後、 session_start(); $_SESSION['su_id'] = $u_id ; $_SESSION['su_name'] = $u_name ; のように設定の上 require "./cart.php"; でcart.phpを呼び出し(?)ています require直後のcart.phpの初期状態では $_SESSION['su_id'] 、$_SESSION['su_name']ともに正しく表示しますが submit等(次ページ表示などで)で再表示を行うと $_SESSION['su_id'] 、$_SESSION['su_name']が引き継がれません cart.phpにおける session_start()時に、新しいIDに置き換わっているからだと思いますが このようなケースではどういう処置を行えばよいのでしょうか? 幼稚な質問かどうかすら判断できていないのですが コメントを頂ければ助かります よろしくお願いします

    • 締切済み
    • 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 セッションの受け渡し失敗 IEはOK

    PHP セッションの受け渡し失敗 IEはOK いつもお世話になっております。 phpで3つのページに渡りデータを引き渡したいのですが、 ブラウザによって成功したり失敗したりしています。 成功・・・IE 失敗・・・GoogleChrome,Firefox,safari,opera a.html(charset=UTF-8) ⇒ b.php(charset=shift_jis) ⇒ c.php(charset=shift_jis)という流れです。 a.html hiddenでpost送信 b.php postデータをsessionへ格納 c.php echoしても表示されない という感じです。 ちなみに、b.phpで格納したセッションデータはc.phpでechoできます。 「a.html」 <form action="b.php" method="post" target="_top">   <input type="hidden" name="cp_name" value="あああ株式会社"> </form> 「b.php」 session_start(); $_SESSION["cp_name"] = mb_convert_encoding($_POST["cp_name"], 'Shift_JIS', 'UTF-8'); 「c.php」 session_start(); echo "[ 販売元 : ".$_SESSION["cp_name"]." ]"; 表示失敗 どなたかご教授頂ければと思います。 何卒宜しくお願い申し上げます。

    • 締切済み
    • PHP
  • セッションについて

    PHPのセッションについてご教授ください。 session_start()の前でセッション名の変更を行うと、セッションidが受け渡されず、次ページが新規セッションとなってしまいます。クッキーを使った解決法を探してます。 セッション名を変更した場合、どのように解決すればよいでしょうか。初心者なのですが、一生懸命勉強中なので、宜しくお願いします。 開発環境: apache2.2 php 5.2 ページ1ソース <?php function main(){ session_name('member'); <= この行をコメントアウトすると、受け渡しできます session_start(); $_SESSION['test'] = 'test'; } main(); ?> <a href="sesstest2.php">test</a> ページ2ソース <?php session_start(); echo $_SESSION['test']; ?>

    • ベストアンサー
    • 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の入力フォームのセッションによる値の受け渡し

    PHPの入力フォームに関するフォームの 値の受け渡しについての質問です フォームのフィールドの値の名前はtitleです で$_POSTで値を受け取って$_SESSIONに値を 格納、変数で出力という感じにしたいと思い こう書きました <?php session_start(); $_POST['title']=$_SESSION['tit']; $_SESSION['tit']=$title; ?> <html> <head> <title>test</title> </head> <body> <?php echo $title; ?> </body> </html> こう書いたのですが、値が表示されません 画面が真っ白になってなにも見えないです なにがおかしいのか教えてください issetはあえて使わず書いたのですが それがいけなかったのでしょうか?

    • 締切済み
    • PHP
  • PHP セッションの受け渡しと取得

    お世話になります。 サムネイル画像を下記で表示させ、 <button type="button" onclick="window.open('1.html','main');" name="写真1" value="<?php echo $file1; ?>"><img src="1S.jpg" width="150" height="110"></button> 上記の画像クリックすると拡大表示するようにしています。 その際、画像のname値「写真1」を保持したまま、次ページへ受け渡して取得したいのですが、 どうすれば良いでしょうか? 下記はサムネイル画像のページと次ページどちらにも入れております。 <?php // セッションスタート session_start(); $file1 = isset($_SESSION['file1']) ? $_SESSION['file1'] : ''; $_SESSION[ 'file1' ] = $file1; ?> 表示箇所には下記を入れています。 <?php echo $file1; ?> どなたかご教授をお願いします。

    • ベストアンサー
    • PHP
  • 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
  • セッションの変数の受渡しについて

    よろしくお願いします。 セッションを利用して変数受渡しを行おうと思い、初めての試み なので簡単なものを作ってやってみたのですが、変数に値をセットしたtest.phpでは値が表示されますが、リンク先のtest2.phpでは表示されません。 以下のソースで試しています。 -------------------------------------------------- test.php <?php session_start(); session_register("aa"); $_SESSION['aa'] = 1234; print $_SESSION['aa']; print "<p>"; print "<a href='test2.php'>next</a>";←ここの画面では表示されます。 ?> test2.php <?php session_start(); print $_SESSION['aa'];←表示されません ?> ---------------------------------------------- 想定では画面に”1234”と出ると思っていたんですが・・。 他質問をみて真似て色々試したのですが、やはり表示できませんでした。 環境は以下です apache2 php ver4.4.4 session Session Support enabled Registered save handlers files user Directive Local Value Master Value session.auto_start Off Off session.bug_compat_42 On On session.bug_compat_warn On On session.cache_expire 180 180 session.cache_limiter nocache nocache session.cookie_domain no value no value session.cookie_lifetime 0 0 session.cookie_path / / session.cookie_secure Off Off session.entropy_file no value no value session.entropy_length 0 0 session.gc_divisor 100 100 session.gc_maxlifetime 1440 1440 session.gc_probability 1 1 session.name PHPSESSID PHPSESSID session.referer_check no value no value session.save_handler files files session.save_path c:\windows\Temp c:\windows\Temp session.serialize_handler php php session.use_cookies Off Off session.use_only_cookies On On session.use_trans_sid On On 環境の問題でしょうか?各ブラウザで試したのですが、ダメでした。 初歩的質問で申し訳ありませんが、ご教示よろしくお願いします。

    • ベストアンサー
    • PHP
  • sessionの使い方

    PHP4でセッションに変数を入れる方法を教えて下さい! $nameという変数をセッションで持ちたいです。 宜しくお願いします。

    • ベストアンサー
    • PHP