tucker
jptak****@gmail*****
2010年 11月 4日 (木) 06:59:45 JST
どうも tucker です。 解決はしてるんですが、ちょっと面白い現象が起きたので情報共有+誰かどういうことか教えて?メールです。 説明しづらいため長くなりそうなので、面倒な人はここでメール読むのを止めるのをオススメします。 -- * * *やろうとしたこと(自分で作るならこんなことは絶対しませんが、やるように強制されたので仕方なく・・・)* 1. クレジットカードでの決済ページで iframe を使い外部ページを自サイト内に表示。 2. 決済処理ページは別ドメインのhttpsで表示するようにし、その他のページはhttp。 例) 決済処理ページ1(http://aaa.com) -> クレジット決済ページ(https://bbb.com) -> 結果表示ページ( http://aaa.com) コントローラは1ファイルで、例えば process.php とすると <?php class Process extends Controllers { function process1() { 決済処理ページ1(http) } function process2() { クレジット決済ページ(https) } function process3() { 結果表示ページ(http) } } と、単純にこんな感じでしょうか。 *設定事項* 1. configのbase_url は http でも https でも(別ドメインでも)自動的に取得・設定するように変更。 2. http から https に移動してもセッションを保持できるように sess_cookie_name をPOSTで送信し、同一セッションと認識するようにライブラリ、その他を変更。(これはかなり変更しているので割愛しますが、動作は確認済み) 3. セッションはDBに保存 4. http & https ドメインは両方とも同じIPと同じサーバ内のファイルを使用(当然ですが) * * * * * * *発生した事象* http から https へ移動する際、*ページが正しく表示されてから*新しくセッションが作られる。 その後、https で別ページを表示しようとすると、(当然)引き継いだはずのセッションが引き継がれていないのでセッションが切れてしまう。 httpページは問題なし(これまた当然だけど)。 * * *解決方法* 受け取り側のメソッド内でなんでもいいから set_userdata() をするとセッションが保持される。 上の例だと http ページ(process1)から https ページ(process2)に移動する際に、コントローラの process2 内で session->set_userdata('なにか') をすればセッションが保持される。 *わからない部分* 1. 正しくページが表示されている時点でセッションがわたってるはずなのに、*表示した後で*新しくセッションが作られるってどういうこと? 2. http から https に移動したときに別ドメインになってるわけだから set_userdata() で ドメインに紐付けてってのはわかるけど・・・ページが表示する前に終わってるべきじゃ? 3. 新しく作られたセッションの中身が空っぽなのは・・・なんでよ? ってところです。 一応解決(というか動作)してるので別にいいっちゃいいんですけど、新しくセッションを作ってる挙動が理解できないので、気持ち悪いんですよ。もしなにかわかる人 or 説明できる方がいれば是非お願いします! tucker -------------- next part -------------- HTMLの添付ファイルを保管しました... 다운로드