2016-02-09 82 views
2

我有2個Codeigniter應用程序,我們稱之爲CI-A和CI-B。如何檢查從一個codeigniter應用程序的會話/用戶數據到另一個codeigniter應用程序

  • CI-A不使用會話庫。
  • CI-B使用會話庫。
  • CI-A和CI-B都使用Codeigniter 3.x.
  • CI-A和CI-B文件都放在同一臺服務器和同一個域中。

如何讓CI-A檢查CI-B中是否有活動的會話/用戶數據?

謝謝!

+0

這有幫助嗎? http://stackoverflow.com/questions/14611545/preserving-session-variables-across-different-domains – codisfy

+0

@codeHeart我會看看。謝謝。 – mokalovesoulmate

+1

你有沒有嘗試在db中保存你的會話? –

回答

0

我正在自己解決這個問題。

首先,確保您將會話數據存儲在數據庫中。不是文件。在這種情況下,CI-A和CI-B都使用相同的數據庫。

二,CI-B,你需要得到的Cookie ID

$this->load->helper('cookie'); 
$cookie_name = $this->config->item('sess_cookie_name'); //cookie name 
$key = $this->input->cookie($cookie_name); //get cookie id 

三,CI-A,你需要確認提交的CI-B的$key

$save_path = $this->config->item('sess_save_path'); //session table name 

$this->load->helper('cookie'); 
$key = $this->input->post('key'); //submitted from CI-B 

//dirty solution 
$this->db->where('id', $key); 
$query = $this->db->get($save_path); 

$data = $query->row(); 

if (!empty($data)) { 
    //session exist 
    //code below are from external source. Even the author were saying it is a horrible solution: http://forum.codeigniter.com/thread-61330.html 
    $session_data = $data->data; 

    $return_data = array(); 

    $offset = 0; 
    while ($offset < strlen($session_data)) { 
    if (!strstr(substr($session_data, $offset), "|")) { 
     throw new Exception("invalid data, remaining: " . substr($session_data, $offset)); 
    } 
    $pos = strpos($session_data, "|", $offset); 
    $num = $pos - $offset; 
    $varname = substr($session_data, $offset, $num); 
    $offset += $num + 1; 
    $data = unserialize(substr($session_data, $offset)); 
    $return_data[$varname] = $data; 
    $offset += strlen(serialize($data)); 
    } 
    return $return_data; 
} else { 
    //session not exist 
    return FALSE; 
} 

如果您發現任何錯誤,請對上述代碼進行更正。謝謝!

相關問題