2016-07-26 6 views
0

私はFacebookのPHP SDKを使用してコメントを残すようにしています。いったん検証されると、私はセッション変数にユーザー情報を格納しますが、最初にsession_regenerate_id()を呼び出して、ページをリロードします。ページがリロードされると、Facebook SDKの状態変数を含め、古いセッションデータは引き続き使用できますが、追加したセッション変数は使用できません。次のコードの抜粋です:session_regenerate_id()の問題

session_regenerate_id(); 
$_SESSION[...] = ...; 

header('Location: ...'); 
die(); 

私が取る場合session_regenerate_id()その後、すべてが完璧に動作します。私が間違っていることは何ですか?

EDIT

私はすべてのページのロードsession_id()をログインした場合、私はsession_regenerate_id()は、新しいIDを生成し、セッションは、私が期待するすべてのものが含まれていることを参照してください。しかし、ページリロードが発生すると、セッションIDは新しいセッション変数ではなく前のセッションIDになります。したがって、新しいセッション変数にアクセスすることはできません。なぜこれが起こるのだろうか?

+0

'<?ph session_start(); session_regenerate_id(); $ new_sessionid = session_id(); echo "新しいセッション:$ new_sessionid
"; print_r($ _ SESSION); ?> –

+0

セッションを使用している場合は、なぜ 'session_regenerate_id();'を実行していますか? – RiggsFolly

+0

@Anant私はそれを行いました。しかし、もう一度テストしている間に、私は、 'session_regenerate_id()'の後に報告されたセッションIDが、古いセッションであるページをリロードしたときと同じではないことに気付きました。だから、私は疑問に思う、なぜセッションIDが実際に変わっていないのだろう? – steveo225

答えて

0

ヘッダーの送受信の際に、最初のセッションが作成されたときに、Cookieに使用されたドメインが.domain.com(wwwは表示されません)であると判断しました。ただし、session_regenerate_id()は、クッキーのドメインをwww.domain.comに設定していました。ブラウザが送信するかどうかを決定すると、ブラウザは常に元のものを送信したので、使用されたセッションは常に古いものでした。私が手動でそのクッキーを削除すると、すべて正常に機能しました。そう、

奇数である何
session_set_cookie_params(0, '/', $_SERVER['SERVER_NAME'], true, true); 

、.htaccessファイルは一貫性のためwww.domain.comが適用されます。

再び起こらないこの種のものを確保するためには、私は私のセッションを開始する前に、以下を追加しました私は最初のクッキーのドメインがそれがそうであったように設定された理由はわかりません。

関連する問題