PHP setcookie只能间歇性地工作(版本兼容性?)

时间:2012-04-23 19:38:03

标签: php setcookie

我目前正在运行2个版本的PHP。我的本地(测试)服务器有5.3.5,而我的远程(实时)服务器有5.2.4。这在过去引起了一些兼容性问题,但我总是很容易解决它们。很快我的远程服务器就会升级,所以它不会引起太多问题,但同时我还是要为这些愚蠢的兼容性问题提供解决方案。有人请看下面我的代码并告诉我他们是否发现了5.2.4 PHP构建的任何问题?

function _cookie($name, $value) {
    $expire = strtotime('+1 month');
    $old_expire = strtotime('last day of next month');

    setcookie(
        $name,
        $value,
        $expire
    );
    var_dump($name, $value, $expire, $old_expire);
}

$date = date(
    'Y-m-d H:i:s',
    filemtime($file)
);
_cookie('user', 'bob');//works
_cookie('up2date', $date);//does not

我最初将'下个月的最后一天'作为我的Cookie到期日期,这就是为什么它仍然在var_dump列表中。但是,该字符串在远程服务器上返回false,导致cookie在会话结束时到期。即使它返回false,它仍然会设置“用户”cookie,我可以在浏览器中查看它。但是,它不会设置“up2date”cookie。我认为这很奇怪,但认为它与strtotime函数返回false有关。所以我先尝试修复它。在查阅PHP手册后,我确定我使用的字符串仅在5.3上可用。在那里,问题确认,容易修复。我用'+1 month'字符串替换它,我知道它将在5.2上工作。成功,我的“用户”cookie现在应该到期。除了我还没有“up2date”cookie。 var_dump证明函数被调用来设置它并具有所有正确的参数,但它没有设置第二个cookie。如果它根本不起作用我就不会感到沮丧。这至少会告诉我,我做错了什么,我可以把它弄出来。但是为了这样逗我...我错过了什么?有没有人有任何想法?

var_dump结果:

//Local server
string(4) "user"
string(3) "bob"
int(1337797496)
int(1338488696)

string(7) "up2date"
string(19) "2012-04-20 10:52:09"
int(1337797496)
int(1338488696)

//Remote server
string(4) "user"
string(3) "bob"
int(1337795061)
bool(false)

string(7) "up2date"
string(19) "2012-04-23 09:14:19"
int(1337795061)
bool(false)

1 个答案:

答案 0 :(得分:0)

感谢DaveRandom。他值得信任,如果他加上他的回答,我会把我的接受改为他的。我刚刚添加了这个答案,所以我没有任何未解答的问题。

解决方案:我在调用第二个Cookie之前输出了,因此无法设置它。我刚搬到我设置cookie的地方。

谢谢大家的建议和时间!