phpによるソースが同じ本番用と試験用の環境(フリースクリプトを改造したショッピングサイト)があるのですが、前者では商品ごとのURLにセッションIDが付かず、後者では付くという差異が生じています。どのような原因が考えられますか? 


オリジナルではURLにセッションIDを付加してセッションを管理するタイプのスクリプトでしたが、ある事情から、これまたフリーの拡張スクリプトでセッションIDがつかないようにしました。その結果、本番用にはつかないのですが、同じソースなのに試験用にはついてしまいます。
カンで結構ですのでアドバイス頂けたら幸いです。
ズバリ的中した方には900pt以上差し上げます。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/06/30 15:37:34
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:nattow No.2

回答回数102ベストアンサー獲得回数27

ポイント400pt

お言葉に甘えてカンで回答です。すいません。

  • クッキーを受け付けない場合セッションID が URL に付加される設定になっている
  • 何らかの理由により、本番用のドメインからのクッキーは受け付け、試験用のドメインからのクッキーは受け付けなくなっている

このようなケースでは標記のようなの問題が発生するかもしれません。

id:hhashimo

ご回答ありがとうございます。対象のショッピングサイトは通貨の変更が出来るのですが、設定した通貨が本番用、試験用それぞれのクッキーに保存されており、その変更内容がブラウザを閉じても保持されていることから、クッキーは問題なく受け付けているようです。

なお、セッションに関連するクッキーは本番、試験用共に見当たりませんでした。他に何かありましたらよろしくお願いします。

2011/06/29 20:34:21

その他の回答3件)

id:n416 No.1

回答回数3ベストアンサー獲得回数1

ポイント200pt

セッションをDBに入れている設定になっているのではないでしょうか?

http://www.res-system.com/weblog/item/619

session_set_save_handlerも見直すといいかもしれません。

http://jp.php.net/manual/ja/function.session-set-save-handler.php

あとはphp.iniの設定を見比べる必要がありますね。

id:hhashimo

ご回答ありがとうございます。サーバーは同じでバーチャルドメインで分けてるだけですので、phpの設定は共有です。セッションは共にDBではなくファイルに保存する設定になっています。他に何かありましたらお願いします。

2011/06/29 19:38:57
id:nattow No.2

回答回数102ベストアンサー獲得回数27ここでベストアンサー

ポイント400pt

お言葉に甘えてカンで回答です。すいません。

  • クッキーを受け付けない場合セッションID が URL に付加される設定になっている
  • 何らかの理由により、本番用のドメインからのクッキーは受け付け、試験用のドメインからのクッキーは受け付けなくなっている

このようなケースでは標記のようなの問題が発生するかもしれません。

id:hhashimo

ご回答ありがとうございます。対象のショッピングサイトは通貨の変更が出来るのですが、設定した通貨が本番用、試験用それぞれのクッキーに保存されており、その変更内容がブラウザを閉じても保持されていることから、クッキーは問題なく受け付けているようです。

なお、セッションに関連するクッキーは本番、試験用共に見当たりませんでした。他に何かありましたらよろしくお願いします。

2011/06/29 20:34:21
id:Cherenkov No.3

回答回数1504ベストアンサー獲得回数493

ポイント200pt

php.iniの再確認。

携帯向け?

id:hhashimo

ご回答ありがとうございます。

1~3つ目については他の方への返信で説明しましたので、省略させて頂きます。

最後のセッションIDが自動付与しない方法については知りませんでしたが、これも本番、試験用ともにhttp://からの絶対URLで指定しています。

URLの文字列を作るfunctionを見ると、http:から始るURLにセッションIDを入れた変数を結合してるのですが、本番用ではセッションID自体が発行されていないので、結合しても結果的にただの絶対URLとなっているという状態です。

しかし、何故か試験用の方ではセッションIDが発行されるためセッションID付きのURLとなっています。

突き詰めれば、なぜ試験用の方だけセッションIDが発行されるのかという問題です。何か思い当たることがあればよろしくお願いします。

2011/06/29 20:46:10
id:pinkymonk No.4

回答回数173ベストアンサー獲得回数14

ポイント200pt

ソースは環境設定がまったく同じということであれば

あと本番とテストでそれぞれバーチャルホストということであれば

PHP.iniの設定を.htaccessで変更していませんか。

http://www.shigeweb.jp/php/project_p/?section=setup&page=htaccess

http://f3.aaa.livedoor.jp/~matukazu/cautions/ini_session.php

id:hhashimo

ご回答ありがとうございます。

.httaccessを確認しましたが、そのような設定はありませんでした。

コメント欄に最新の調査状況を書きましたので、他に何かありましたらよろしくお願いします。

2011/06/30 15:20:14
  • id:hhashimo
    なお、試験環境は、本番用と同じサーバーのディレクトリにバーチャルホスト設定で、別ドメインを割り当てています。データベースも試験用の別のデータベースをあてています。それらは一つの設定ファイルで指定されており、それ以外のソースは全て同じです。
  • id:hhashimo
    再度確認したところ、本番環境においてもsession_start()の直後はセッションIDが発行されてることがわかりました。その後どこかで消されているのですが、そもそも何故本番環境ではセッションIDがないのにセッション管理が出来ているのか、素人の私にはわかりません。
    (拡張スクリプトを組み込んでセッションIDが付加しないようにした当初は、SEOの関係でただURLから消したいという一心でそこまで考えていなかった。)
  • id:Cherenkov
    試験用のどこかに「拡張スクリプト」の何かが残っているのでは?
  • id:Cherenkov
    逆で本番用か。
  • id:hhashimo
    どうも色々と誤解がありました。
    拡張スクリプトはURLにセッションIDが付加しないようにするためのものですが、これは現在無効になっています。ですのでこの件は無視して下さい。
    本番用、試験用ともに、商品ページURLの文字列作成時にセッションIDを付加する流れとなっていますが、本番用ではセッションIDの変数が空になっているため、本番用のみ単なるURLとなっているという状況です。
    なお、クッキーを読み込んでいるというのも正確ではありませんでした。
    セッションとは無関係のクッキーは読み込んでいますが、セッションクッキーは読み込んでいないようです。(※昨日までセッションクッキーというものを知りませんでした)
    session.use_trans_sid はオフ(0)になっていますし、セッション名の変数(PHPSESSID)を表示させてみましたが、両者とも何も表示されません。
    (php.iniではデフォルトのsession.name = PHPSESSIDになっています。)

    なお、まだハッキリしませんが、URLに付加するセッションIDは"SID"(クライアントが適当なクッキーを送信しない場合に定義される定数)のようです。
    このことからもセッションクッキーは使っていないように思われます。

    もうしばらく質問を続けますが、解明できなかった場合は、視点を変えて別の質問をするかもしれません。出来ましたらまたご回答お願いします。
  • id:hhashimo
    個人的にはSIDを使ってるのが鍵だと思っています。
    ソース中にもSIDが度々出てきているのですが、どこにも定義されておらず以前から謎でした。"クライアントが適当なクッキーを送信しない場合に定義される定数" とわかって納得です。
  • id:hhashimo
    もう一つの謎は、何故本番用ではセッションクッキーもURLへの埋め込みも行っていない(行えていない)のにセッション管理が出来ているのか?ということです。
  • id:hhashimo
    先ほどのコメントに誤りがありました。どうやらセッションクッキーは使っています。
    セッションクッキーの確認方法に問題があり、判断を誤りました。
    それから、セッション名はphp.iniではデフォルトのPHPSESSIDのままですが、
    スクリプトの内部でにセッション名を"osCsid"というものに変更しておりました。

    セッションをスタートした直後の変数は、

    <本番用>
    $HTTP_POST_VARS["osCsid"]:
    $HTTP_GET_VARS["osCsid"]:
    $_COOKIE["osCsid"]:982c7870d48dcd16d1decaff158a5f0d
    $HTTP_COOKIE_VARS["osCsid"]:982c7870d48dcd16d1decaff158a5f0d


    <試験用>
    $HTTP_POST_VARS["osCsid"]:
    $HTTP_GET_VARS["osCsid"]:c9c70a28ae08ef6e495cc33b1868dc58
    $_COOKIE["osCsid"]:
    $HTTP_COOKIE_VARS["osCsid"]:

    という具合です。
  • id:fujiyuta1
    クッキーを受け付けない場合セッションID が URL に付加される設定になっている
    何らかの理由により、本番用のドメインからのクッキーは受け付け、試験用のドメインからのクッキーは受け付けなくなっている
    このようなケースでは標記のようなの問題が発生するかもしれません。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません