我有一个网站,其中登录信息可选地保存在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);
}
答案 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),并确保域有效且过期时间/值符合预期。