使用URL变量的PHP Cookies

6

我不是PHP专家,但我正在尝试设置一个包含URL中推荐代码的cookie。例如:www.example.com?promotioncode=google应该设置一个名为promocode的cookie,值为=后面的任何内容,并在6个月后过期。

我可以使用以下方法检索promotioncode:

$_GET['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就可以正常设置。 我错过了什么/做错了什么?

你有检查HTTP响应头吗?由于头部已经被发送,你尝试设置cookie可能会失败。你有检查错误日志吗? - Gumbo
这实际上是在Magento安装中进行的,与Magento生成的其他cookie以相同的方式添加。如果我将值设置为123,则可以正常工作,问题是从URL中提取参数。 - Andy
那段代码应该是可以工作的,而且在这里也确实可以工作。你怎么知道它不起作用?你检查了cookie还是检查了setcookie()的返回值?你有没有vardump $_GET的内容?有什么奇怪的地方吗? - Sylverdrag
5个回答

3

为定义服务器上可用的Cookie路径添加一个参数:

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

它应该可以工作。


0

一个简单的 $string$_GET['key'] 之间没有区别,所以问题不可能出在这里。

同时检查一下你的 setcookie 的第四个参数。


0

试试这个:

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

空字符串("")可以帮助澄清或设置$value的类型。引号基本上确保$value变量作为字符串参数传递给setcookie方法。


这个答案出现在低质量审核队列中,可能是因为您没有提供任何关于代码的解释。如果这段代码回答了问题,请考虑在您的答案中添加一些解释代码的文字。这样,您更有可能获得更多的赞同 - 并帮助提问者学习新知识。 - lmo

0

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


0

尝试添加

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接