codeigniter を使用してキャンバスの Facebook ページを作成しています。ユーザーのログイン後、残りの API は ajax ページで動作します。最初のajax呼び出しを行うと、セッションデータを取得できないため、セッションが空かどうかを確認してからページをリロードします。その後、ajaxページでセッションを取得します。そのため、1 回の ajax 呼び出しと 1 回のリロード後にのみ、session_id が修正されます。
ajax 呼び出しを行わずにページを更新すると、毎回セッション ID が再生成されます。
私がやりたいことは、データを最初に 1 回だけ SESSION にロードすることだけです。そして、それを私の ajax ページで使用できるようにします。
更新: IE でのみ発生することを認識しているため、この問題に関するスレッドを見つけました。しかし、解決策は私にはうまくいきませんでした。
header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');
HTACCESS:
php_value session.save_path "/tmp"
SetEnv session.use_cookies='1';
php_value session.gc_maxlifetime 86400
php_value session.cookielifetime 86400
php_flag log_errors on
php_value error_log "/PHP_errors.log"
構成:
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie'] = FALSE;
$config['sess_use_database'] = FALSE;
$config['sess_table_name'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update'] = 7200;
コントローラ:
function MyController()
{
session_start();
parent::__construct();
$this->connectUser();
}
function connectUser(){
//IF ITS AN AJAX CALL CHECK SESSION AND RELOAD
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
if (!isset($_SESSION["userid"]) ) {
echo "AJAX : ".session_id();// the session id on ajax call
echo "<script type='text/javascript'>
window.top.location = 'https://apps.facebook.com/....';
</script>";
}else echo "I have session data on ajax page";
}
else{
echo "PAGE : ". session_id(); // the session id on page load
if(!isset($_SESSION["userid"])){
$this->load->library('facebook');
$user = $this->facebook->getUser();
if ($user) {
try {
$data['user_profile'] = $this->facebook->api('/me');
} catch (FacebookApiException $e) {
$user = null;
}
}
if (isset($data)) {
//SET SESSION HERE ....
$_SESSION["userid"]=$data['user_profile']["id"];
}
}
}
}