2013-10-29 30 views
3

由於我們的支付系統,我們必須使用第三方網站上的某種中繼系統來擁有有效的PCI(HTTPS)。CodeIgniter會話ID改變而不起作用

我們目前正面臨一個奇怪的錯誤,我們現在使用了太多小時。

我們在註冊中有4個步驟。

  1. 輸入所有數據。
  2. 添加圖像
  3. 付款

這是我們如何做到: 在步驟1中,我們所有的POST數據保存到會話 $this->session->set_userdata("campaigncreation", $out); 沒錯$出包含所有數據。

在步驟中,我們可以輕鬆打印出campaign campaign的會話數據; <?print_r($this->session->userdata)?>

因爲我們需要轉到另一個網站,所以我們將session_id添加到我們的通話中,以便將會話保留在第三方網站上。

我們的網址是這樣的: https://relay.ditonlinebetalingssystem.dk/relay/v2/relay.cgi/http://xxxx.dk/something/controller/a1264526031adb9c71ae433eef44bfa0

正如你看到的,我們需要在URL中的session_id(<?=$this->session->userdata("session_id")?>),並在我們的控制我們,因爲這與替換會話ID控制器:

$ phpsess是「a1264526031adb9c71ae433eef44bfa0

if (!empty($phpsess)){ 
      $this->session->set_userdata("session_id",$phpsess); 
} 

當我們現在打印出我們得到正確SESSION_ID用戶數據,但它不與我們從第1步在一些取數據 怎麼樣。什麼做?

我只得到

Array 
(
[session_id] => a1264526031adb9c71ae433eef44bfa0 
[ip_address] => 87.54.46.121 
[user_agent] => Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.69 Safari/537.36 
[last_activity] => 1383052142 
[user_data] => 
[advertiser_id] => 1 
[advertiser_name] => xxxx 

但在某些方面它仍然有ADVERTISER_ID和ADVERTISER_NAME正確的數據,所以這是完全奇怪。

怎麼辦?

這就像codeigniter刷新每個頁面加載的session_id,因此會有問題。

或者也許是因爲域cookie設置?我不知道,請幫助我們。

+0

如果我明白你在這裏做什麼,我認爲與會話有關的安全設置不會被允許w跨站點傳輸數據。你應該使用一些Web服務,例如。寧靜。 –

回答

0

它被稱爲會話輪換,它實際上是CodeIgniter中的一個安全功能, 我不建議禁用它,而是爲您的引用創建一個表並將每個請求中的單個使用授權令牌附加到另一個域。

然後從您的第二個域交叉引用令牌服務器端。

讓我知道如果你需要更多的細節=]

你可以看到我的答案的一個關於同一主題在這裏:
IonAuth - seems to be randomly logging me out

0

我有同樣的問題(上刷新改變會話ID ),結果我沒有在我的測試平臺/設備上設置正確的日期時間。

0

嘗試放置您網站的coorect網址。

$config['base_url'] = 'http://www.yoursite.com'; 
0

在我試圖拾別人這件奇怪的情況。我的開發部署測試會失敗,會話在ajax調用上不同。

似乎本地虛擬機IP不足以匹配此特定CodeIgniter項目的卷積。

只有當我使用正確的域名設置本地DNS服務器時,它才允許logged_in識別會話$ username/$ identity。

我想ajax是從外部調用域的,而我在本地使用虛擬機提供的IP查看站點。

0

根據CI的Session.php,ID在每次更新時都會更改,但它們保留對舊ID的引用,以便它們可以更新它的右側行。

此外,根據文檔:「SESSION_ID」是(默認)每五分鐘再生會話ID‘我會建議您設置的另一個獨特的可變」

如果沒有特別原因需要使用。’在用戶數據,並把它作爲「會話ID」。

$uniqueId = uniqid(time()+$unique_user_variable, TRUE); 
$this->session->set_userdata("my_session_id", md5($uniqueId)); 

爲「唯一用戶變量」根據您的具體情況下,從用戶的IP,用戶名,用戶名等可能會有所不同。