【问题标题】:PHP setcookie only intermittently works (version compatibility?)PHP setcookie 只能间歇性工作(版本兼容性?)
【发布时间】:2012-05-08 22:16:11
【问题描述】:

我目前正在运行 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 月”字符串替换了它,我知道它可以在 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)

【问题讨论】:

  • 如果将 'up2date' 更改为 'update' 会怎样?我从来没有在变量名中成功使用过数字
  • 没有帮助。此外,它适用于本地(相同的浏览器,相同的机器),并且过去一直有效。直到最近,当我将其更改为使用 strtotime 时,它才停止工作。我只想把它改回来,但如果它适用于一个,为什么不两个?
  • 发送到 filemtime() 的文件是否可能存在权限问题?在读取 filemtime() 之前,在 filemtime() 之前尝试对该 $file 进行 chmod
  • @b_dubb 该变量是 cookie 值,而不是过期时间。我刚刚在谷歌上找到了这个链接,如果你用这些函数替换你的last day of next month怎么办? ullu.wordpress.com/2007/02/28/find-last-day-of-the-month-in-php
  • @b_dubb:不错的想法,但没有。我一直将其更改为“777”,转储缓存和cookie并再次尝试。仍然不会设置。

标签: php setcookie


【解决方案1】:

感谢 DaveRandom。他在这里值得称赞,如果他添加他的答案,我会将我的接受转换为他的。我刚刚添加了这个答案,所以我没有任何未回答的问题。

解决方案:我在调用第二个 cookie 之前有输出,因此无法设置它。我刚刚移动了我设置 cookie 的位置。

感谢大家的建议和时间!

【讨论】:

    猜你喜欢
    • 2020-02-04
    • 1970-01-01
    • 2019-08-27
    • 2023-03-14
    • 2017-04-23
    • 2013-10-07
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多