2012-04-29 142 views
3

目標:如何維護PHP會話狀態與其他應用程序

保持一個PHP應用程序和ColdFusion應用程序一起,包括整個應用程序之間的會話狀態。

電流法:

在登錄到我們的ColdFusion應用程序(登錄的唯一途徑,即無法通過PHP應用程序登錄),我們使用下面的JS代碼片段調用遠程PHP文件,該文件設置PHP會話cookie(無法通過ColdFusion的設置),並在後續ColdFusion頁訪問,刷新PHP會話:

<script type="text/javascript"> 
    // Create an image. 
    var imgPing = new Image(); 
    // Set image src to App A ping url. 
    imgPing.src = "http://remotePHPApplicationURL/remoteFile.php"; 
</script> 

登錄時保持平行會議這段代碼加載每個ColdFusion頁上。

如果通過非SSL Coldfusion頁面調用該方法,則該方法按設計工作,但是,有一些構成應用程序的SSL Coldfusion頁面。當SSL頁面調用此片段時,我們在Chrome Inspector中都會收到「不安全內容」警告(這會打斷我們的SSL連接)以及「匿名函數」錯誤。

我們已經嘗試過使用CFHTTP來「獲取」這個PHP文件,但它沒有按照設計設置PHP cookie。我不明白如何通過使用img.src來執行PHP文件而不是使用CFHTTP。

問題:

有另一種,調用/執行/查驗PHP文件與uring這似乎只在非SSL的情況下工作img.src更好的方法?

這裏是什麼樣的PHP文件看起來像一個例子:

<?php 
    error_reporting(E_ALL & ~E_NOTICE); 
    define('THIS_SCRIPT', 'index'); 
    define('CSRF_PROTECTION', true); 

    $globaltemplates = array();  

    require_once('./global.php'); 

    $phpapp->session->save(); 
    setcookie('userid', 'uid'); 
    setcookie('password', 'pass'); 
    header("Content-Type: image/png"); 
?> 
+0

如果您在SSL頁面上調用此項,會發生什麼情況:'imgPing.src =「https://remotePHPApplicationURL/remoteFile.php」;' –

+0

https://remotePHPApplicationURL/remoteFile.php沒有SSL證書,所以我們得到一個錯誤。 –

+0

服務器有httpsdocs或private_html文件夾嗎?如果你把如上所述的php文件放在你的文章末尾的這個文件夾中,並在那裏進行會話設置? –

回答

4

您可以使用CFHTTP,但必須像瀏覽器和遠程應用程序之間的代理那樣使用它,並手動管理髮送和接收的Cookie。

我做這個成功對用戶登錄到phpBB的從ColdFusion的

這一過程將是這個樣子

  1. CFHTTP到remoteFile.php
  2. 檢查返回的HTTP響應,並提取由遠程應用程序設置的Cookie
  3. 使用CFCOOKIE將其設置在用戶瀏覽器中

在隨後的請求中,您需要查看應用程序發送的cookie是否存在,以及是否在步驟1中使用CFTTPPARAM將它們與CFHTTP請求一起傳遞。 Theres可能是由應用程序設置的sessionid或類似的cookie,這需要發送以維護會話。

+0

感謝您的回答。 –

0

希望我是錯的,但我不能想到了解決辦法。但是,我確實有一些洞見,爲什麼解決方案很難實現,希望能夠有所幫助。

CFHTTP不起作用,因爲它是調用PHP頁面的ColdFusion服務器,而不是用戶的瀏覽器。所以,ColdFusion服務器有一個會話,但用戶的計算機沒有。

有很多方法可以從瀏覽器中調用文件(您可以從IMG標籤,CFSCRIPT標籤,IFRAME,圖像對象中調用它),但它們都遇到同樣的問題 - 即如果您從SSL頁面調用非SSL文件,瀏覽器將發出警告。

因此,在SSL服務器上沒有SSL服務器的情況下,通過SSL從ColdFusion維護一個PHP會話可能在瀏覽器中沒有警告的情況下是不可能的(當然,我希望證明錯誤)。

根據您的需要,可能會發揮什麼作用是使您的服務器到PHP服務器的任何鏈接向PHP服務器發送一個表單信息,包括登錄信息,以便它們在訪問時自動登錄第三方網站。我不知道這是否適合你的情況,但我想我會把它扔到那裏。

然而,要點是要尋找另一條通往您的目標的路徑,而不是在ColdFusion應用程序的每個頁面請求上維護會話。

+0

感謝您的洞察力。 –

0

我建議使用SAML SSO實現,並且只在需要時對特定應用程序進行身份驗證,您可以使用數據庫將簡單會話信息作爲json字符串交叉存儲。如果實施得當,這些體驗將是無縫的,並將提供可擴展的解決方案。

相關問題