【问题标题】:setcookie() not working in internet explorer or safarisetcookie() 在 Internet Explorer 或 Safari 中不起作用
【发布时间】:2012-04-02 12:03:19
【问题描述】:

我有以下代码:

setcookie('username', $email, false, 'affiliates/', 'www.mydomain.com');

它在 IE 或 Safari 中不起作用。然后我改成:

setcookie('username', $email, time()+60*60*24, 'affiliates/', 'www.mydomain.com');

它开始工作了。现在,2天后,它不再起作用了。我不认为我改变了什么。正在另一个文件中检查 cookie 的设置,代码如下:

if( isset($_COOKIE['username']) ) {
    ...
}
else {
    print( "<meta HTTP-EQUIV='REFRESH' content='0; url=index.html'>" );
    exit();
}

它总是重定向到 index.html(在 Safari 和 IE 中)。任何想法为什么这会停止工作? (我已确保在两个浏览器中都启用了 cookie)。

在它停止工作期间我做的一件事是测试在 localhost 上运行的站点。我将代码更改为:

setcookie('username', $email, time()+60*60*24, 'affiliates/', null);

但仅适用于 localhost 版本。

【问题讨论】:

  • 在 cookie 中设置密码是一个糟糕的主意,因为这意味着它会随着每个请求来回传输,并且大大增加了它被拦截的机会。如今,反转 MD5 哈希是可行的。虽然您可能对 cookie 有疑问,但您可能想回过头来为您在此处尝试解决的更大问题考虑更好的解决方案。
  • 我猜你是对的,我只需要设置用户名 cookie。
  • 然后用户可以更改他们的用户名并以其他人的身份登录。
  • 他们仍然需要正确的密码。 Cookie 的唯一目的是防止有人直接输入其他人主页的 URL。
  • 是的,但他们使用会话和/或其他可能在服务器端过期的随机不透明令牌。只是众所周知的用户名不是安全机密

标签: php internet-explorer cookies safari setcookie


【解决方案1】:

你确定你在所有其他输出之前都有 setcookie 吗?标题不能在任何类似的文本或 html 之后设置。也许您需要删除上方的任何空间

此外,必须从相同的域和路径设置和使用 cookie。

【讨论】:

  • "另外,cookie 必须从相同的域和路径设置和使用。" cookie 在 mydomain.com/signin.php 中设置,并在 mydomain.com/affiliates/homepage.php 中检查。这就是为什么我将路径设置为“affiliates/”。对吗?
  • 当 Path 属性的值不是请求 URI 的前缀时,Cookie 将被拒绝。没有路径也能用吗?
  • 是的。我将“affiliates/”更改为“/”,现在它似乎可以正常工作了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-23
相关资源
最近更新 更多