2011-12-27 102 views
5

我想通过PHP设置cookie。该方案是这样的:如何在PHP中为域设置Cookie

域名:example.com

上有子域中的一个网页(my.example.com)。我的代码是:

$value="I am looged in"; 
setcookie("TestCookie", $value,'','',".example.com"); 
echo "hello".$_COOKIE["TestCookie"]; 

但结果只是“你好” - cookie没有设置。请建议可能的解决方案。

谢谢!

+0

这个在使用时有效:setcookie(“TestCookie”,$ value); – Yogesh 2011-12-27 12:56:06

+0

为了更容易的cookie管理,尤其是关于“域”属性,你可以使用这个:https://github.com/delight-im/PHP-Cookie – caw 2016-07-12 23:27:29

+0

你可能会发现['$ cookie-> setDomain($ domain )'](https://github.com/delight-im/PHP-Cookie/blob/004cde69ec840e65c15275e09b92ecb1da06f357/src/Cookie.php#L117)有帮助,在[这个独立的库](https://github.com)中找到/喜悦-IM/PHP-饼干)。 – caw 2016-09-21 04:33:09

回答

9

对实际调用setcookie的前两个更正:参数3(expired)应该是一个整数值(默认值为0);参数4应设置为'/'以使cookie对所有子目录有效;因此setcookie通话应该是这样的:

setcookie("TestCookie", $value, 0, '/', ".example.com"); 

那么就应该实际工作第二次调用脚本。要理解为什么它第一次不能正常工作,我们必须挖掘一点into how cookies work;基本上,Cookies是从服务器发送到客户端的数据,服务器在此表示“在下次向我发送请求时向我发送此数据”。这基本上就是setcookie的用途:当请求完成并且客户端已经接收并处理了页面时,指定的cookie将在客户端创建;另一方面,$_COOKIE保留所有值,其中已经在Cookie中已经是,并且已经由客户端与请求一起发送 - 意味着第一次调用脚本时,$ _SESSION实际上仍然是空的,因为只有在客户端收到脚本输出后才会创建cookie。

+0

非常感谢你解释的东西!这对我有用。 – Yogesh 2011-12-27 13:12:24