为什么我的cookie值不会在PHP 5中发生变化?

时间:2009-07-13 14:42:41

标签: php cookies

我有一个网站,其中登录信息可选地保存在cookie中(在登录时记住我的复选框),当用户注销时,身份验证cookie的值不会更改为允许注销的cookie到期。

系统在开发和登台服务器中都能正常工作,但由于某种原因无法在我们的生产服务器上运行。我们在所有服务器上运行PHP 5和Apache。

感谢。

设置cookie的功能(安全性的小编辑):

function setCookieInfo($data,$expiry=0)
{
   if($data === false)
   {
       //remove cookie!
       $cookie = false;
       $expiry = 100; //should be in the past enough!
   }
   else
   {
       $serial = base64_encode(serialize($data));
       $hash = md5($XXX);
       $cookie = $hash."---".$serial;
   }

   if($_SERVER['SERVER_NAME']=='localhost')
   {
       $domain = null;
   }
   else
   {
       $domain = '.'.$_SERVER['SERVER_NAME'];
   }

   return setcookie('Auth', $cookie, $expiry, $this->controller->base, $domain);
}

3 个答案:

答案 0 :(得分:1)

发布一些实际的代码可能有所帮助,但我猜测它与正在使用的cookie域有关。

答案 1 :(得分:0)

假设您使用的是PHP setcookie()函数,请确保正确设置了cookie的域和路径。有关详细信息,请查看PHP's documentation以获取该功能。

我或许可以告诉你我是否有更多信息。您是否可以提供更多信息而不会过多地影响项目?开发,登台和生产服务器的URL如何,或至少它们可能是什么样的例子?

修改

根据您在评论中提供的信息,我建议您尝试使用HTTP_HOST而不是SERVER_NAME。 SERVER_NAME可能会给您一个奇怪的值,具体取决于您的虚拟服务器设置。您的路径也可能不太正确 - 尝试'/',无论用户所在的子目录是什么,它都应该可用。

另外,

$this->controller->base

让我觉得您可能正在使用CodeIgniter或Kohana。如果是这样,您可以考虑使用他们的cookie助手。

答案 2 :(得分:0)

获取旨在删除Cookie的SetCookie调用的流量捕获(例如www.fiddler2.com),并确保域有效且过期时间/值符合预期。