Apache上的$ _COOKIE []和RewriteRule是否在一起使用时会被破坏?

时间:2011-02-08 06:14:54

标签: php apache url-rewriting

当我在网址重写后设置并获取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与我的域名的所有子网址一致的建议。

1 个答案:

答案 0 :(得分:2)

使用cookie的第四个参数'/',以便可以在域的所有目录中访问它。

setcookie("USERNAME", "usernamestring", time()+3600,'/');
  

如果设置为'/',则cookie将为   在整个域内可用。如果   设置为'/ foo /',cookie只会   在/ foo / /   目录和所有子目录等   as / foo / bar /域名。默认   value是当前目录   正在设置cookie。

了解更多信息 http://php.net/manual/en/function.setcookie.php