2011-06-04 54 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