セッションのスコープ(有効範囲)について困っています。

このQ&Aのポイント
  • セッションのスコープ(有効範囲)について困っています。同一ドメインでフォルダ階層が異なる場合にセッションが切れてしまう現象が起きています。
  • セッション生成後のフォルダ階層の移動でセッションの参照ができなくなってしまう問題について試行錯誤していますが、解決策が見つかりません。
  • スコープについて調べましたが、同一ドメインであることが条件となっていることしか分かりませんでした。他にセッションのスコープを広げる方法があるのか教えていただきたいです。
回答を見る
  • ベストアンサー

セッションのスコープ(有効範囲)について

セッションのスコープ(有効範囲)について困っています。 ご存じの方がいましたら教えてください。 現象:同一ドメインでフォルダ階層が異なる場合にセッションが切れてしまう。 例) http://oshiete1.goo.ne.jp/aaa/a.php セッション生成 http://oshiete1.goo.ne.jp/aaa/b.php ○セッション参照 http://oshiete1.goo.ne.jp/bbb/b.php ×セッション参照 あれこれ試行錯誤して1日がつぶれてしまいました。 以下についてお教え頂けたら幸いです。 Q.別階層でもセッションは参照できるか。   上位階層でセッションを生成しないと下位階層では共有できない?   もしくは何か方法がある? 書籍などもあさったのですが、スコープについては同一ドメインであることくらいしか記述されていませんでした。 できる、できないの一言だけでもいいので、なにとぞよろしくお願いします。

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

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

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

cookieを利用しているsessionなら以下の変数をチェックしましょう。 session.cookie_path 次の関数でも、解ります。 session_get_cookie_params ( ) defaultの "/" なら、サイト内全てに有効のはずですが、どこかで、 '' 空文字列に変更したりしていると、cookieを作成したディレクトリー内でしか使えなくなります。

その他の回答 (1)

  • fa-ce
  • ベストアンサー率42% (9/21)
回答No.1

ファイルが削除されてしまっていたので状況は分かりませんが、 別階層でもセッションは参照できます。 上位階層でセッションを生成しなくても共有できます。 <?php session_start(); は記述されていますよね?

the_moon
質問者

お礼

>別階層でもセッションは参照できます。 ありがとうございます!! >session_start(); >は記述されていますよね? はい。 「openpne」というSNSをテストしているところなので、もしかしたら、そのセッションが特殊なのかもしれません。 これから調べてみます。 ありがとうございます!!

関連するQ&A

  • スコープの応用

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=1508969 の応用としてなんですが、とくに、セッションスコープやリクエストスコープ、ページスコープなどを使用して、HTMLやCSSのコードから独立したJavaScriptであれば、同じ処理をPHPでもできるんではないかと思いました. もしかしたら、HTMLやCSSのコードから独立してないJavaScriptに対してもPHPで同じ処理に置き換えることができるとも思えますがいかがなものでしょうか?

    • ベストアンサー
    • PHP
  • phpでセッションの切れるタイミングについて

    page1.phpで $_SESSION["SESSION_1"] = "aaa"; 次画面 page2.phpで $_SESSION["SESSION_2"] = "bbb"; としたとします。 セッションがタイムアウトした場合、$_SESSION[]ごとすべて開放されているのか、 $_SESSION["SESSION_1"]と$_SESSION["SESSION_2"]は個別なのかどちらですか? えーと、何がしたいのかと言いますと、 複数セッションを定義したとして、 セッションが生きているかどうかは定義したセッションすべて調べないとわからないのか? どれか一つ調べればいいのか? それが知りたいです。

    • ベストアンサー
    • PHP
  • SESSIONとGLOBALSとCLASSについて

    ご教授お願いいたします。 以下のこういったことは可能でしょうか? ■質問 「A.php」で クラスをグローバル変数に代入し、それをセッションに登録し、「B.php」で取り出すことは可能でしょうか。 ⇒可能な場合  「B.php」でどうやって取り出せばよいでしょうか。 ⇒不可能な場合  「A.php」から「B.php」へクラスを渡したいのですが、どうすればよいでしょうか? ■例 「A.php」というソースで クラスをグローバル変数に代入し、セッションに代入する。 ○例(A.php): $xxc = new XXX_XXX_CLASS(); $xxc->setA('aaa'); $GLOBALS['@XXX_XXX_CLASS'] = $xxc; session_start(); // セッションにセット $_SESSION['aaa'] = $GLOBALS['@XXX_XXX_CLASS']; // セッションのクローズ session_write_close(); ○例(B.php): session_start(); 取り出し方:1 $xxc = $_SESSION["aaa"]; // ←取り出せなかった。 $xxc->getA(); 取り出し方:2 $xxc = new XXX_XXX_CLASS(); $xxc = $_SESSION["aaa"]; // ←取り出せなかった。 $xxc->getA(); 取り出し方:3 ほかに取り出し方がありましたらご教授お願いいたします。 グローバル変数を通さないやり方もしてみたのですが、そちらでも出来ませんでした。 以上、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • $_SESSIONに二次元配列を使えるのですか?

    php4.3です。 例えば、 syouhin[12-3][name]='aaa' syouhin[12-3][price]='2000' syouhin[12-3][tani]='箱' syouhin[22-4][name]='bbb' syouhin[22-4][price]='1500' syouhin[22-4][tani]='袋' ・・・ のような二次元配列があった場合、 $_SESSION("s_arry")に syouhin[12-3]の[12-3]のキーと [name][price][tani]の値を を渡したいのですが。 [22-4]も追加することもあります。 また、そのセッションに[12-3]が設定されているか 判断し、されていれば[name]等を参照したいのですが。 意味がお分かりでしょうか? まだセッションのところが良くわからず悪戦苦闘しています。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • セッションが引き継げません

    PHP5.3 + Apache2.2 Windowsです。 IE7でページ遷移を行うと、セッションが引き継げず、新しいセッションが作成されてしまいます。(Chromeでは引き継げます) セッション保存フォルダに新しいセッションファイルが生成されていました。 以下ソースコードです。 $_SESSION['hogehoge'] = 'xxxx'; header("Location:sapmle.php"); sapmle.phpで$_SESSION['hogehoge']を参照すると、エラーになる。 エラー内容:Notice Undefined Index 'hogehoge' また、<a href="sample.php">次のページ</a> と記述したリンクをクリックしても同じエラーになります。 php.ini の use_trans_sid を Onにすると、エラーは出ません。 use_only_cookies を OnしてもOffにしてもエラーは出ました。 use_trans_sid が Offでも header("Location:sapmle.php?" . session_name() . "=" . session_id()); と書くとエラーは出ません。 エラーが出なくなれば良いので、use_trans_sid を Onにしたり、URLにセッションIDを付与すれば良いのかもしれませんが、 これらの処置はセキュリティ上良くないと聞いたことがあるので、どうするのがいいのかわかりません。 わかる人教えてください。よろしくお願いします。

    • ベストアンサー
    • PHP
  • セッションアットワンス

    セッションアットワンスでCD-RWを焼く方法がわかりません。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1699509 で質問していたものです。 探してみたら、私はB'sRrcorderを持っていました。 B'sClipを買ったときについてきていました。 B'sRrcorder GOLD BASIC というものです。 これでヘルプから「セッションアットワンス」を検索してみたのですがHITしません。 B'sRrcorderを起動すると「ディスクアットワンス」とか「ディスクを閉じる」というチェックボックスがあるので、この辺の使い方でできるのかな・・・と思いつつ、ヘルプに出てこないので今いちわかりません。 お持ちの方でセッションアットワンスのやり方をご存知のかた、ご教示お願いします。

  • SESSIONを階層ごとに分けるには?

    お世話になります。 現在.htaacessでパラメータをRewriteしてアドレスをスッキリさせています。 【htaccess】 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([-0-9A-Za-z]+)/([-0-9A-Za-z)]+)$ index.php?a=$1&b=$2 [L] www.sample.com?a=test1&b=test2 を www.sample.com/test1/test2 といった形にしています。 SESSIONのパスが現在「/」となっており、どのページでセッションを発行しても「www.sample.com」以下ならすべて有効になっているのですが、これをその階層以下でしか使えないようにする方法はありますでしょうか? 【例】 www.sample.com/test1/aaaa で発行したセッションはその階層(test1)以下でのみ有効としたい。 www.sample.com/test1/aaaa 、www.sample.com/test1/bbbb で開いたセッションは1つ目の階層(test1)以下どのページでも有効にしたい 実際に「test1」フォルダが存在するわけではないため、htaccessを設置することができず、また「test1」の階層名も様々であるため困っています。 どうぞよろしくおねがいいたします。

    • ベストアンサー
    • PHP
  • [PHP]セッション破棄について

    はじめまして。 phpを始めて1週間の初心者です。 現在、ホームページでログイン処理とログアウト処理をphpのセッションを使って作成しています。 今回質問させて頂くのはログアウト処理についてです。 ログアウト処理をでセッションを破棄する際に http://oshiete1.goo.ne.jp/qa3224862.html を参考にして下記の処理を行わせています。 -------------------- logout01.php -------------------- <?php session_start(); $_SESSION = array(); if(isset($_COOKIE[session_name()])){setcookie(session_name(),'',time()-4200,'/');} session_destroy(); header("location: http://~トップページのURL~/"); ?> -------------------- 確認をしたところ、ログインしたユーザの情報は削除されているようでした。 また、http://oshiete1.goo.ne.jp/qa3224862.htmlを参考に下記のようなログアウト処理も行わせてみました。 -------------------- logout02.php -------------------- <?php session_start(); unset($_SESSION['access']); header("location: http://~トップページのURL~/"); ?> -------------------- 同じく確認したところ、ログインしたユーザ情報は削除されているようでした。 -------------------- 環境 -------------------- <サーバ> 【OS】 windows XP(テスト環境)、CentOS 5.2(公開環境) 【PHP】 5.2.6 【Apache】 2.2 <クライアント> 【OS】 windows XP 【ブラウザ】 Firefox 3.0.8 IE 7 -------------------- -------------------- 質問 -------------------- (1)logout01.phpとlogout02.phpの違いは何でしょうか。 (2)「unset($_SESSION);」は使用すると「$_SESSION」が使えなくなるとのことですが、  それはphpを再インストールしない限りは使えなくなるということでしょうか。  それとも、ブラウザを再起動すれば使えるという意味でしょうか。 (3)「unset($_SESSION);」と「unset($_SESSION['access']);」では何が違うのでしょうか。 (3)セッションを使用するとサーバ側にセッションIDを保存したファイルが保存され、  クッキーがクライアント側に保存されるとのことですが、logout01.phpとlogout02.phpを  実行した場合、サーバ側のセッションIDを保存したファイルとクライアント側のクッキーを  保存したファイルは削除されているのでしょうか。 (4)セッションの有効期限を指定していないため、logout01.phpとlogout02.phpを実行せずに  ブラウザを終了させた時もログインしたユーザ情報は削除されているようでしたが、  この場合もサーバ側のセッションIDを保存したファイルとクライアント側のクッキーを  保存したファイルは削除されているのでしょうか。 初歩的な質問で申し訳御座いませんがよろしくお願いします。

    • ベストアンサー
    • PHP
  • mod_writeの書き方を教えて下さい。

    mod_writeの書き方を教えて下さい。 http://www.domain.com/aaa/bbb で静的アドレスでアクセスしたいです。 aaaディレクトリにindex.phpを置いています。 しかしやり方がわかりません。できますでしょうか。 RewriteRule ^aaa/(.*)$ /aaa/index.php?id=$1 [L] 上記でinternal serverエラーになります。 http://www.domain.com/aaa/bbb.html のように.htmlを付けたくないのです。 RewriteRule ^aaa/(.*).html$ /aaa/index.php?id=$1 [L] 上だとうまくいきます。 お願いします。本当に困っています。

  • sessionの扱いがこれで合っているか不安なのですが

    http://oshiete1.goo.ne.jp/qa2708238.html の問題を,何とかセッションで解決できないかと思っています.入門書を見ながら, 上記URLに示した元質問のサンプルの session_start(); の下に, if(!session_is_registered("Name")){ session_register("Name"); } if(!session_is_registered("reg")){ session_register("reg"); } という6行を挿入し, リダイレクト先である next.php 内に echo $_SESSION["Name"]; とか echo $_SESSION["reg"]; とか書いたら, それぞれのValueを渡すことができているのですが, この使い方であってますでしょうか? もし,他に注意点があったらお願いします.

    • ベストアンサー
    • PHP