2011-06-04 57 views
5

我不是PHP專家,我試圖設置一個包含來自URL的引用代碼的cookie。例如:www.example.com?promotioncode=google應該設置一個cookie名稱promocode,在=和6個月到期後值。PHP Cookie使用URL中的變量

我可以檢索使用

$_GET['promotioncode'] 

的promotioncode,但我似乎無法插入cookie字符串這一點。我已經嘗試了幾種方法:

$id = 'promo'; 
$value = $_GET['promotioncode']; 
$time = time()+60*60*24*180; 
setcookie($id, $value, $time); 

$id = 'promo'; 
$time = time()+60*60*24*180; 
setcookie($id, $_GET['promotioncode'], $time); 

,但它不工作。如果我使用單詞或數字作爲cookie值,那麼Cookie設置沒有問題。

我在想什麼/做錯了什麼?

+0

你檢查了HTTP響應頭嗎?您嘗試設置cookie可能會失敗,原因是標頭已被髮送。你有沒有檢查你的錯誤日誌? – Gumbo 2011-06-04 15:40:30

+0

這實際上是在一個magento安裝中,並且以與由magento生成的其他cookie相同的方式添加。如果將值設置爲123,它可以正常工作,問題是通過url中的參數拉動。 – Andy 2011-06-04 15:43:59

+0

該代碼應該可以工作,並且在這裏有效。 你怎麼知道它不起作用?你檢查cookies或者你檢查setcookie()的返回值嗎?你有沒有申請$ _GET的內容?有什麼奇怪的嗎? – Sylverdrag 2011-06-09 16:11:30

回答

0

簡單的$string$_GET['key']之間沒有區別,所以問題不可能是這樣的。

另外,請檢查您的第4個ARG setcookie

0

嘗試添加

if($_GET['promotioncode']) 
    setcookie(.....) 
2

添加參數來定義該cookie將可在服務器上的路徑:

setcookie($id, $value, $time, '/'); 

它應該工作。

0

$ id = $ _GET ['promotioncode']; setcookie('promotioncode',$ id,time()+ 60 * 30 * 24 * 3600,'/');

0

試試這個:

setcookie($id, "" . $value, $time); 

的空字符串( 「」)可能有助於澄清或設置$值的類型。引號基本上確保$ value變量作爲字符串參數傳遞給setcookie方法。

+0

這個答案出現在低質量的審查隊列中,大概是因爲你沒有提供任何代碼的解釋。如果此代碼回答此問題,請考慮添加一些文字,說明答案中的代碼。這樣,你就更有可能獲得更多讚揚 - 並幫助提問者學習新東西。 – lmo 2016-09-05 21:46:07