setcookie() 不在 www.domain.tld 上创建 cookie,但在 domain.tld 上工作
setcookie() doesn't create cookie on www.domain.tld but works on domain.tld
我到处搜索并尝试了一切。
如果您在 http://r4ge.ro 上登录,它会起作用。如果您访问 www.r4ge.ro,cookie 将被读取并起作用。
如果您注销,请尝试登录 www。r4ge.ro 永远不会创建 cookie。
$data = "name=" . $jucatoru . "&pass=" . md5($passw);
$date_of_expiry = time()+60*60*24 ;
setcookie ( $cookie, $data, $date_of_expiry, "/", ".r4ge.ro");
echo "Succesfully logged in";
exit();
我已经检查过了,这不是读取问题,如果您尝试从 www.r4ge.ro 登录,cookie 不存在。在 chrome 和 firefox 上测试(站点在 IE 上不工作)
注销是这样完成的
$date_of_expiry = time() - 60 ;
setcookie( $cookie, "nothing", $date_of_expiry, "/", ".r4ge.ro");
echo "Succesfully logged out!
这就是读取 cookie 的方式
$data = $_COOKIE[$cookie];
parse_str($data, $output);
$name = $output['name'];
$pass = $output['pass'];
测试凭据:test : test1 如果你想自己试试
您的浏览器不允许您为 'higher' 比您当前所在 URL 的域设置 cookie。您正在尝试在 r4ge.ro
上设置 cookie,当您在 上 r4ge.ro
时它工作正常,但是当您从 www.r4g3.ro
加载页面时] 您只能为 www.r4ge.ro
或以下(例如 foo.www.r4ge.ro
)设置 cookie。如果您假设您有一个站点 example.co.uk
,并且您试图在该站点上为 co.uk
域设置一个 cookie,那么这将变得更加明显:这肯定是危险的,因为该 cookie 可能随后被读取(并用于跟踪您的浏览习惯)来自 any .co.uk
域。
如果您省略 setcookie()
中的最后一个参数,那么它将设置为当前站点,这将起作用(如果您登录 www
子域,您将不会登录顶级域,但所有其他排列都有效)。
我会继续回答这个问题,即使答案非常不令人满意。
我已经写信给我的托管服务提供商,他们提供了两种解决方案:
为 www 和非 www(愚蠢)创建两个单独的 cookie
使用 .htaccess 从 www 重定向到非 www(仍然愚蠢,但显然每个人都这样做,因为 hurr durr 重复内容[你甚至可以尝试 www.whosebug.com])
为了让每个人都遇到这个问题,再次 google 搜索,这是您需要添加到 .htaccess 中的脚本,以便在不指定域的情况下从 www 重定向到非 www。
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/ [R=301,L]
如果有人知道 cookie 问题的答案,请 post 也知道。
我到处搜索并尝试了一切。 如果您在 http://r4ge.ro 上登录,它会起作用。如果您访问 www.r4ge.ro,cookie 将被读取并起作用。 如果您注销,请尝试登录 www。r4ge.ro 永远不会创建 cookie。
$data = "name=" . $jucatoru . "&pass=" . md5($passw);
$date_of_expiry = time()+60*60*24 ;
setcookie ( $cookie, $data, $date_of_expiry, "/", ".r4ge.ro");
echo "Succesfully logged in";
exit();
我已经检查过了,这不是读取问题,如果您尝试从 www.r4ge.ro 登录,cookie 不存在。在 chrome 和 firefox 上测试(站点在 IE 上不工作)
注销是这样完成的
$date_of_expiry = time() - 60 ;
setcookie( $cookie, "nothing", $date_of_expiry, "/", ".r4ge.ro");
echo "Succesfully logged out!
这就是读取 cookie 的方式
$data = $_COOKIE[$cookie];
parse_str($data, $output);
$name = $output['name'];
$pass = $output['pass'];
测试凭据:test : test1 如果你想自己试试
您的浏览器不允许您为 'higher' 比您当前所在 URL 的域设置 cookie。您正在尝试在 r4ge.ro
上设置 cookie,当您在 上 r4ge.ro
时它工作正常,但是当您从 www.r4g3.ro
加载页面时] 您只能为 www.r4ge.ro
或以下(例如 foo.www.r4ge.ro
)设置 cookie。如果您假设您有一个站点 example.co.uk
,并且您试图在该站点上为 co.uk
域设置一个 cookie,那么这将变得更加明显:这肯定是危险的,因为该 cookie 可能随后被读取(并用于跟踪您的浏览习惯)来自 any .co.uk
域。
如果您省略 setcookie()
中的最后一个参数,那么它将设置为当前站点,这将起作用(如果您登录 www
子域,您将不会登录顶级域,但所有其他排列都有效)。
我会继续回答这个问题,即使答案非常不令人满意。
我已经写信给我的托管服务提供商,他们提供了两种解决方案:
为 www 和非 www(愚蠢)创建两个单独的 cookie
使用 .htaccess 从 www 重定向到非 www(仍然愚蠢,但显然每个人都这样做,因为 hurr durr 重复内容[你甚至可以尝试 www.whosebug.com])
为了让每个人都遇到这个问题,再次 google 搜索,这是您需要添加到 .htaccess 中的脚本,以便在不指定域的情况下从 www 重定向到非 www。
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/ [R=301,L]
如果有人知道 cookie 问题的答案,请 post 也知道。