2016-11-08 18 views
2

opAuth loginを実装しようとしています。 PHP 5.4.45。私はPHPのページを起動すると、私はsession_id()を印刷する場合、私はこの後opauthの実装とセッションIDの問題

if(!session_id()) session_start(); 

を呼び出し、それが "fsdfoasdiuhf736jf732938f92"(i)を言う

を出力します今私はOpAuthでFacebookのログインをクリックしてください。すべて正常ですが、私はユーザーデータを正しく取得しますが、コールバックページでセッションIDが異なります。つまり、私はsession_id()を印刷すると、(i)と異なるIDを出力します。

問題は、ユーザー名を$ _SESSION ['user']としてホームページにリダイレクトすると問題になります再び元のセッションID(i)に戻ります。ユーザー名はそこに設定されていません。

私はセッションが開始する前に確認しています。私は何か間違っているのですか?

UPDATE

私が起こっても何の手がかりを持っていると思います。ログインURLを呼び出すと、元のセッションIDがあります。コールバックURLをこの関数に渡します。 facebookがログインを許可し、コールバックURLにリダイレクトするとき、PHPがfacebookからのリクエストとしてこれを見ているかもしれませんか?これは新しいセッションなので、新しいセッションを作成します。ユーザーがいたものと同じではありませんか?そして、PHPが元のページにリダイレクトすると、元のセッションに戻りますか?これは理にかなっていますか?もしそうなら、どのようにセッションを同じに保つことができますか?

+0

私は、アクセス許可の昇格が行われているため、セッションIDを再生成していると推測しています。おそらく 'session_id( 'setnewsidreceivedfromOauth')を使用して解決します。 – Xorifelse

+0

しかし、元のセッションIDはどのように戻っていますか?それは可能ですか?彼らはデフォルトのcallback_transportとして 'session'を使います。私はこれを「投稿」に変更しても、同じことが起こります。 – aVC

+0

OpAuthの詳細な検査では、コールバックがセッションに設定されている場合にのみ、新しいセッションが開始されます。それは他の何かでなければなりません。あなたは潜在的に229行の 'opauth.php'をあなたが持っているコードの行に置き換えることができます。それが "設計どおりに動作する"かどうかはわかりません – Xorifelse

答えて

0

最後に問題を把握しました。ログインボタンがある実際のページはwwwページではなく、ログインボタンにはwww urlがあります。したがって、コールバックURLが形成されると、デフォルトでwww urlになります。これは非wwwのURLとは異なり、新しいセッションが形成されます。私はすべてwww以外のURLに変更し、期待どおりに動作しています。