【お題】動物のキャッチフレーズ

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変数が統一されていないか分かる方がいらっしゃいましたら、どうかご意見をお聞かせください。

A 回答 (7件)

今後見る人のために。


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

> セッション管理以外でクッキーが正常に機能しているかを調べる方法はどうしたらよいのでしょうか。


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

PHP初心者と自称しているので失礼かもしれませんが念のため初歩的なことで確認したいことがあります。


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

返信ありがとうございます。
返事が遅くなってしまって大変失礼致しました。

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>';
?>

リンクでの遷移としております。

お礼日時:2010/08/18 17:03

> 「$ss_name = session_name();」をSESSION01.phpとSESSION02.phpとでechoで表示したら2ページとも「PHPSESSID」という文字列が表示されました。



 これはデフォルトのまま変更されていないので問題ありません。

> SESSION01.php → fgjqrfduk2v6b46q9rag9u5180
> SESSION02.php → te9demj99aqr85if9hdcpphl31

 IDの値が違うのは別のセッションだと認識されてるってことですよね。

 php.iniで次の設定値がどうなっているか確認して見てください。

session.gc_maxlifetime

 これはセッション情報が削除されるまでの時間(秒数)の設定値で、デフォルトでは1440になってるはずです。この値が極端に小さいとセッション情報はすぐに削除しまいます。

 あと、セッション管理以外でクッキーが正常に機能しているかどうか。(設定として有効かどうかじゃなくて、実際にクッキーがちゃんと使えるかどうか)
    • good
    • 0
この回答へのお礼

返信ありがとうございます。
返事が遅くなってしまって大変失礼致しました。

「php.ini」の「session.gc_maxlifetime」は1140となっています。

セッション管理以外でクッキーが正常に機能しているかを調べる方法はどうしたらよいのでしょうか。
POSTとGETは正常に動作しているようです。

質問ばかりしてしまい申し訳ございません。

お礼日時:2010/08/18 16:56

#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の値を設定する必要があります。

この回答への補足

返信ありがとうございます。

ご指導頂きました「$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()等のセッションを終了するような関数は呼び出してはいないです。


大変お手数ですが、どうか返答をお願い致します。

補足日時:2010/08/17 09:52
    • good
    • 0

セッション管理が無効になってるのでは?


php.iniのセッション関連の設定を確認してください。
とくに次の二つは要注意

 session.use_cookies
   クッキーでセッション管理する場合は1, クッキーを使わない場合は0

 session.use_trans_sid
   URLパラメータでセッション管理する場合は1, そうでない場合は0

この回答への補足

返信ありがとうございます。

セッション管理は有効になっているようです。


色々調べていて先ほど気付いたのですが、1人に対してSESSIONは1つ作成されるのみ?だそうですが、私のSESSIONのディレクトリには1度に2つSESSIONが作られています。


SESSION1.php $_SESSION["name"]

SESSION2.php $_SESSION["name"]
は別物と認識されているようです。

補足日時:2010/08/16 19:05
    • good
    • 0

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

この回答への補足

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

補足日時:2010/08/16 15:59
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!