2012-03-20 119 views
0

我有一個ColdFusion頁面,發佈表單值,我傳遞給一個PHP頁面(通過cfhttp)。 Coldfusion代碼示例:ColdFusion表單值到php setcookie()

<cfhttp method="Post" url="https://www.test.com/ssl/get_cookies.php" result="cookieResponse"> 
     <cfoutput> 
      <cfif isdefined("ppcid")><cfhttpparam name="PPCID" type="formField" value="#session.ppcid#"></cfif> 
      <cfif isdefined("cid")><cfhttpparam name="CID" type="formField" value="#session.cid#"></cfif> 
      <cfif isdefined("leadcomm")><cfhttpparam name="LEADCOMM" type="formField" value="#LEADCOMM#"></cfif> 
      <cfif isdefined("clk")><cfhttpparam name="CLK" type="formField" value="#CLK#"></cfif> 
      <cfif isdefined("dck")><cfhttpparam name="DCK" type="formField" value="#DCK#"></cfif> 
      <cfif isdefined("ccid")><cfhttpparam name="CCID" type="formField" value="#CCID#"></cfif> 

     </cfoutput> 
</cfhttp> 

將這些值發佈到get_cookie.php後,我想將這些值設置爲cookie。這裏是我的get_cookies.php代碼的例子:

setcookie("LEADCOM", getVariable('LEADCOMM'), time()+604800, "/", ".fha.com", 0); 
setcookie("CCID", getVariable('CCID'), time()+604800, "/", ".fha.com", 0); 
setcookie("QTR", getVariable('QTR'), time()+604800, "/", ".fha.com", 0); 
setcookie("CLK", getVariable('CLK'), time()+604800, "/", ".fha.com", 0); 
setcookie("DCK", getVariable('DCK'), time()+604800, "/", ".fha.com", 0); 

僅供參考 - 的getVariable是功能_REQUEST $的CF變量在PHP。我檢查了我的瀏覽器,即使在我嘗試重新訪問該頁面時,也無法看到這些Cookie。有什麼建議麼?

+0

我應該提到去php的原因,是我正在將整個站點從CF遷移到PHP。 – 2012-03-20 20:16:00

回答

0

您在瀏覽器中設置Cookie。在這種情況下,「瀏覽器」是CFHTTP標籤,它不支持cookie。您可以讀取已設置的cookie,它們會在cfhttp響應中返回,但它們實際上不會寫入任何地方。

+0

此外,CFHTTP調用發生在服務器上,而不是在您的客戶端瀏覽器中。他們是在不同的機器上發生的兩個獨立請求。您可以在客戶端通過Ajax或Javascript提交進行POST,然後在用戶的瀏覽器中設置這些Cookie。 – 2012-03-20 20:18:55

+0

我一直在使用cfhttp方法POST來傳遞一些表單變量到一個php重定向,它的工作很好。如果cfhttp不支持cookies,將這些值從CF壓縮到PHP的最佳方式是什麼? – 2012-03-20 20:21:14

+0

是的,您可以使用CFHTTP將所有您喜歡的內容發佈到PHP或任何其他服務器端語言。那不是問題。由於CFHTTP呼叫,您期待cookies被寫入。 CFHTTP調用發生在服務器上,而不是在客戶端瀏覽器中。假設您的網站上有1000個用戶訪問該頁面,那麼服務器如何知道將Cookie寫入哪個瀏覽器?這就是說,正如我上面提到的,你可以通過Javascript進行POST。在這種情況下,它將在客戶端瀏覽器中進行,並且Cookie將被寫入。否則,您期望來自服務器端解決方案的客戶端行爲。 – 2012-03-20 20:25:42

0

對於上述示例,您可以將您的CFHTTP請求視爲向PHP頁面發出請求的「瀏覽器」。您在PHP中設置的cookie將返回到CFHTTP結果「cookieResponse」。那時他們仍然在服務器上,沒有任何東西返回到初始客戶端(稱爲CF頁面開始的那個客戶端)。如果您希望在最終用戶的瀏覽器中將這些設置爲cookie,則需要使用ColdFusion再次設置它們。 這意味着你必須解析cookieResponse.header結果,發現餅乾, 你可以得到的餅乾了使用cookieResponse.responseHeader [「設置Cookie」],並將其設置爲最終用戶的瀏覽器cfheader

像這樣

<cfset cookies = cookieResponse.responseHeader["set-cookie"] /> 
<cfloop from="1" to="#structCount(cookies)#" index="i"> 
    <cfheader name="SET-COOKIE" value="#cookies[i]#" /> 
</cfloop>