当我在网址重写后设置并获取Cookie时,我遇到了一个奇怪的错误。这是我使用的重写规则:
RewriteRule ^([A-Za-z0-9]+)/([A-Za-z0-9]+)$ /$1/$2/ [R]
RewriteRule ^([A-Za-z0-9]+)/([A-Za-z0-9]+)/$ /index.php?destination=$1&command=$2
这就是我打印cookie的方法:
var_dump($_COOKIE);
我还有一个登录设置正确的cookie,以及一个使cookie过期的注销。
登录:setcookie("USERNAME", "usernamestring", time()+3600);
注销:setcookie("USERNAME", "0", time()-3600);
当我访问www.remoteaccessnow.com时,cookie为空。 当我访问www.remoteaccessnow.com/accounts/时,cookie不是空的。
这是在同一个会话期间完成的。这个bug发生在chrome 9,firefox 3+和IE8中。
如果我根本不使用重写规则,则没有问题,并且cookie在整个“子网址”中是一致的。我不知道是什么导致了这个问题。似乎www.remoteaccessnow.com和www.remoteaccessnow.com/accounts/被“cookie处理器”视为两个不同的域。
我正在寻找有关如何保持Cookie与我的域名的所有子网址一致的建议。
答案 0 :(得分:2)
使用cookie的第四个参数'/'
,以便可以在域的所有目录中访问它。
setcookie("USERNAME", "usernamestring", time()+3600,'/');
如果设置为'/',则cookie将为 在整个域内可用。如果 设置为'/ foo /',cookie只会 在/ foo / / 目录和所有子目录等 as / foo / bar /域名。默认 value是当前目录 正在设置cookie。