こんにちは、いつもお世話になっております。
SSLと非SSLのページでのセッションのやりとりができずに困っています。
それぞれURLはこんな風になっております。
http://ドメイン/hoge.php
https://ドメイン.ssl-xserver.jp/fuga.php
やりたいのは非SSLのページで保存していた$_SESSION['hogehoge']をSSLのページでも使用したいということなのですが、SSLのページで$_SESSION['hogehoge']は取得できていませんでした。
そこでsession_idを確認したところ違うものが入っていたので、非SSLからSSLに行くときにpostでsession_idを渡たし、SSLページに非SSLと同じsesstion_idを設定することができました。
しかしまだSSLページで$_SESSION['hogehoge']は取得できませんでした。
このような場合何が原因として考えられますか?また、私がやろうとしていることはそもそも不可能なのでしょうか?
文字ばかりでわかりにくいかもしれませんが、よろしくおねがいします!
ご指摘をいただきました。hoge.phpとfuga.phpは同じサーバー内にあります。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
外から与えられたセッション ID を使う、という設計はセッション固定攻撃の隙を作りますし、そもそも筋が悪いのでやめたほうがいいと思います。
商品を渡すときの引換券を、お店が発行したものではなく、来店してきた人が勝手に作ってきたものを有効と認めるような話ですから。
SSL ページと非 SSL ページが同一サーバ内という追加情報を得て、の追記です。
PHP の (組み込みの) セッションは、セッション ID を cookie で受け渡す仕組みですから、ドメインが異なっても同じセッション ID を送る、というのは無理でしょう。
こういうときに PHP でやる定石みたいのはありそうですが、私が今思いつくのは、http と https のどちらからも共有できる情報の領域を確保し、どちらからも使うものはいわゆるセッションではなく、その領域に格納する、という方法かな、と。http, https それぞれのいわゆるセッションの関連付けは、http から https に遷移する際に推測困難なトークンを渡す、とかで行うとして。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
HTTPとHTTPSでホスト名が異なるのでセッションが別々になってしまっているのですね。
一般的によく使われるのは、HTTP側のセッションIDをform内に常に持たせてpostさせる、という方法でしょうか。
これは、最初にされていた方法ですね。
phpではセッション情報は通常、ファイルで保存されています。
ファイル名は「sess_セッションID」です
そのファイルが保存されるディレクトリはsession_save_path()で取得できます。
保存する際は、
file_put_contents(上記で生成したファイルのフルパス, session_encode(), LOCK_EX);
セッション情報を取得する際は、
session_decode(file_get_contents(上記で生成したファイルのフルパス));
で、セッションに展開されます。
しかし、セキュリティ上、同じセッションIDを持ちまわるのも問題があります。
可能であれば、サーバーにPOTSされてセッション情報を読み込んだ後、session_regenerate_id(true)などでセッションIDを変更するのがベターと思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.35%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
unau
2016/05/16 10:38
hoge.php と fuga.php、それぞれは同じサーバにあって、URL が違うだけと思っていいのですか。
そこを明確にしてください。
abababa03
2016/05/16 10:41
同じサーバー内です。失礼いたしました。