我使用codeigniter構建了一個canvas facebook頁面。用戶登錄後,api的其餘部分與ajax頁面一起工作。當我做第一個Ajax調用時,我無法獲取會話數據,所以我檢查會話是否爲空,然後重新加載頁面。之後,我在ajax頁面中獲得會話。所以只有一個Ajax調用和一個重新加載我的session_id得到修復。會話ID在每次刷新時重新生成
如果我不做任何ajax調用,但刷新頁面,會話id每次重新生成。
我只想在一開始就將數據加載到SESSION一次。並且能夠在我的ajax頁面上使用它。
更新:我意識到它只發生在IE瀏覽器,所以我發現這個問題的線程。但該解決方案並不適合我。
facebook canvas session problems in ie
頭( 'P3P:CP = 「IDC DSP COR ADM德維戴氏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:
$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"];
}
}
}
}
我第一次使用codigniter會話類當我第一次有這個問題我想笨會議是問題,所以我使用本地會話,但沒有改變。我使用最新的Facebook PHP SDK(v.3.1.1)。另外我加載自動載入庫: $ autoload ['libraries'] = array('database','Template','memcached_library','facebook','session'); –
我試過你建議的圖書館。它在重載循環中被刪除,因爲即使我登錄它也無法到達我的用戶信息。 –