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件)
- 最新から表示
- 回答順に表示
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つ出来るだけです。
どうも文面から察する限りこの思い違いの可能性を捨て切れなかったので。
私の誤解であれば、ごめん。
返信ありがとうございます。
返事が遅くなってしまって大変失礼致しました。
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になってるはずです。この値が極端に小さいとセッション情報はすぐに削除しまいます。
あと、セッション管理以外でクッキーが正常に機能しているかどうか。(設定として有効かどうかじゃなくて、実際にクッキーがちゃんと使えるかどうか)
返信ありがとうございます。
返事が遅くなってしまって大変失礼致しました。
「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の値を設定する必要があります。
この回答への補足
返信ありがとうございます。
ご指導頂きました「$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
この回答への補足
返信ありがとうございます。
セッション管理は有効になっているようです。
色々調べていて先ほど気付いたのですが、1人に対してSESSIONは1つ作成されるのみ?だそうですが、私のSESSIONのディレクトリには1度に2つSESSIONが作られています。
SESSION1.php $_SESSION["name"]
と
SESSION2.php $_SESSION["name"]
は別物と認識されているようです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ブラウザの戻る ページ遷移PHP...
-
リロード・ページビューの判定
-
onedrive にexcelファイルをア...
-
フォントの色を変えるには?
-
服にかいた油性ペンがにじまな...
-
PHPのif文でその処理を途中で抜...
-
コードがそのまま表示される
-
.phpのファイルを開けない!
-
mysql複数レコードをまとめて削...
-
PHPファイルの画像背景について
-
バッチを用いたフォルダの自動移動
-
http://localhost/に.htaccess...
-
MySQLのdatetime型の月日0を削...
-
パソコン一日中つけっぱなしの...
-
WordPressのコメント数表示を消...
-
拡張子php画像をjpg画像等に変...
-
wordpressのテーマSightの日付表示
-
<A href ~ と一緒に値を渡すには
-
「include」と「file_get_conte...
-
社内LANで複数台のPCからApache...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHP session_destroyとsession...
-
$_SESSION 有効期限をブラウザ...
-
セッションのクッキー有効期間...
-
セッションファイルの場所
-
リロード・ページビューの判定
-
session_set_save_handler の実...
-
セッション部分のインクルード
-
SESSIONを階層ごとに分けるには?
-
jqueryの$.ajaxでPHPに値を渡し...
-
phpのセッションについて
-
PHPからリアルタイムにデータを...
-
phpソース間で値を保持しておけ...
-
IE11でページ遷移時にセッショ...
-
レンタルサーバーのセッション...
-
DOCOMOのセッションについて
-
さくらサーバーでsessionが使え...
-
session(PHP)が表示されない。
-
GETでの変数の受け渡しについて
-
phpでのログアウトについて
-
セッション管理について
おすすめ情報