CodeIgniter-カスタムセッションデータはFacebookによって削除されますか?
-
05-07-2019 - |
質問
すべての値をダンプする方法があるかどうか疑問に思っています
$this->session->userdata()
トラブルシューティングできるように
Facebook内で作業しており、ログインページがあります。成功したら、現在のユーザーのUIDを渡したいと思います。これはうまくいくと思いました。
現在、次のようにuidを設定しています:
require_once 'facebook.php';
$appapikey = 'XXXX';
$appsecret = 'XXXX';
$facebook = new Facebook($appapikey, $appsecret);
$user_id = $facebook->require_login();
$this->db->like('uid', $user_id);
$this->db->from('users');
$has_signed_up = $this->db->count_all_results();
if ($has_signed_up == 0) {
redirect('/setup/signup/', 'location');
}
else {
$this->session->set_userdata('uid', $user_id);
redirect('/preferences/index/', 'location');
}
それでリダイレクトが発生し、設定/インデックスで非常に簡単なセットアップができます:
echo "this is the preferences form <br />";
echo $this->session->userdata('uid');
echo $this->session->userdata('session_id');
そして結果は不可解です:
this is the preferences form
858f500e167e359edc1942a96f3bac35
したがって、uidを含む中間エコーを完全にスキップします。これを正しく設定していませんか?セッション配列のすべての値をダンプして、何が起こっているかを確認する方法はありますか?どんな助けでもいいでしょう。
更新
生の各Webサイトで、Facebookを介してvar_dump($ this-&gt; session-&gt; userdata)を実行しました。
Webサイトでは、5つの値(session_id、IP、User_agent、last_activity、uid)を含む配列内のすべての設定値を公開します。
ただし、Facebook chrome内では、CodeIgniterによって設定された4つの値のみが表示されます。 Cookieは4kにしかならず、暗号化が問題になる可能性があると聞きました。 FBは、独自の暗号化(読み取り:大きい)データでCookieを埋めることができますか?
UPDATE 2
リダイレクトをコメントアウトし、次のようにした場合:
else {
$this->session->set_userdata('uid', $user_id);
echo ':test_'.$this->session->userdata('uid').'_test:';
//redirect('/preferences/index/', 'location');
}
Facebook内で忠実に:test_1234_test:を返します。そのため、リダイレクト中のどこかで、配列のこの部分が失われます(配列全体ではありません)。
リダイレクトページで新しいセッションを作成しているだけですか?そのため、4つの「ストック」しかありません。変数?その場合は、セッションを作成する方法を調査する必要があります。FacebookがCookieをクリアする場合は、推測します。
UPDATE 3
だから私はFBがそれらを取り除くか衝突するかのいずれかだと考えて、クッキーの代わりにDBを使用してセッション情報を保存することにしました。現在、アプリは次のように設定されています
- $ user_id = 1234に設定
- $ this-&gt; session-&gt; set_userdata( 'uid'、$ user_id)
- 新しいページにリダイレクト
- すべての可能な情報をVar_dump
DBで発生することは次のとおりです。 DBレコードhttp://nikolausjj.facebook.joyent.us/Picture2.png
したがって、ユーザーデータを使用して1つの適切なレコードを作成し、リダイレクトするとすぐに前のセッションを認識せずに新しいセッションを作成します。 CIフレームワークが以前のセッションが存在するかどうかを確認する場所を誰かが説明できますか?ユーザーマニュアルでは、「マジック」と説明されています。基本的に。
解決
var_dump()
を使用できます。 でセッションを出力します。このようなもの
var_dump($this->session);
set_userdata
呼び出しは正常に見えます。 $ user_id
が設定されていますか?エコーは実行されますが、 uid
は設定されていないか、空の文字列に設定されているためです。
エコーを
に置き換えてみてください
echo ':test_'.$this->session->userdata('uid').'_test:';
回答に役立つその他の情報
- どのブラウザを使用していますか
- ドメイン名にアンダースコア
_
がありますか? - CIセッションまたはネイティブPHPセッションのラッパーを使用していますか
- リダイレクトをコメントアウトすると、
uid
の値も失われたり設定されたりしませんか?
その他の提案:
- try
redirect( '/ preferences / index /'、 'refresh');
location
の代わりに
- Facebookの開発には慣れていませんが、
/ preferences / index
を管理していますか?はいの場合、$ this-&gt; load-&gt; library(&#8216; session&#8217;)
を削除して(存在する場合)、代わりにautoload.php
に読み込みます。 -
$ config [&#8216; sess_match_ip&#8217;]
を「FALSE」に変更してみてください -
$ config [&#8216; sess_encrypt_cookie&#8217;]
をFALSEに設定してみてください - CI-Sessionの使用を CIネイティブセッション に置き換えてみてください。
- Cookieに保存されていない場合、UIDは賢明な情報です。なりすましが可能かどうかが問題になる場合は、気にしないでください。
他のヒント
Facebookを介してセッション変数をページ間で渡す方法を解決しませんでした。私の解決策は、各ページでユーザーのUIDのFacebook APIを再度呼び出すだけでした。素晴らしいプログラミングではありませんが、私にとってはうまくいきます。 :-/