2013-09-25 45 views
1

我有一个应该设置cookie的脚本。在网络服务器上,它工作得很好,但是当我在本地测试时,它没有设置。setcookie()不在本地设置cookie

的摘录:

setcookie('sid', 'nv48thnuf39sonv', 0, '/', $_SERVER['HTTP_HOST']); 

echo isset($_COOKIE['sid']) ? $_COOKIE['sid'] : '(empty)'; 

没有之前的setcookie呼叫输出。

在服务器上,第一次加载时显示为(empty),第二次加载时显示为nv48thnuf39sonv(预期行为)。然而,它通过http://localhost/,它说(empty),并永远不会改变,无论我捣烂多少次F5

有谁知道什么可能会导致cookie不被设置?

+0

为什么你甚至不需要'...,“/”,$ _ SERVER [“HTTP_HOST”]) ;'你可以忽略它们,因为它们有一个默认值 – Yang

回答

0

这是你的cookie域。

它至少需要两个点(.),否则您的浏览器将认为它无效,从而不存储cookie。绕过它最简单的方法是简单地将Cookie域设置为null当你$_SERVER['HTTP_HOST']为localhost:

$cookieDomain = $_SERVER['HTTP_HOST'] == 'localhost' ? null : $_SERVER['HTTP_HOST']; 
setcookie('sid', 'nv48thnuf39sonv', 0, '/', $cookieDomain); 
echo isset($_COOKIE['sid']) ? $_COOKIE['sid'] : '(empty)'; 
+0

这很好运行现在我想知道,是否有一种方法来指定一个cookie的域本地主机,将工作?我想在本地开发,而不必依赖像这样的开关。 –

+0

我实际上使用了一个名为'dev.local'的自定义域,它已经添加到我的主机文件中,因此它将在本地解析。如果域名不好,浏览器会自动将'.'加到前面,所以虽然它可能不会帮助'localhost','dev.local'会变成'.dev.local',这是一个有效的cookie域名。 – SamT