Bug #68954 [Asn->Wfx]: DateTime::COOKIE does not match setcookie() or any RFC

From: Date: Fri, 13 May 2022 14:33:20 +0000
Subject: Bug #68954 [Asn->Wfx]: DateTime::COOKIE does not match setcookie() or any RFC
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-241500@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=68954&edit=1 ID: 68954 Updated by: derick@php.net Reported by: AgentConundrum at gmail dot com Summary: DateTime::COOKIE does not match setcookie() or any RFC -Status: Assigned +Status: Wont fix Type: Bug Package: Date/time related Operating System: * PHP Version: master-Git-2015-01-30 (Git) Assigned To: derick Block user comment: N Private report: N New Comment: Hi, I'm going to mark this as "Won't fix", as it's now 7 years later and nobody else has brought it up :-) If you want to revisit this case, please open a new ticket at https://github.com/php/php-src/issues cheers, Derick Previous Comments: ------------------------------------------------------------------------ [2015-01-30 15:07:20] AgentConundrum at gmail dot com Hi Derick, Yes, I would definitely agree that the specs are a bit ambiguous and not even commonly followed in this area. And again, this isn't a major issue for me - I've already updated my test case to use the explicit format, rather than the constant. I just thought that it would be expected that the format php *calls* "cookie" should be the same as what it sends *in* a cookie. If the two didn't match, I'm not sure what the expected use of such a constant would be, since both setcookie() and setrawcookie() take timestamps, these date formats. Maybe if someone was doing it directly in header() for some weird reason? And just to clarify, I misspoke when I said I was parsing the cookie. I was actually building an expected string and comparing that with the sent cookie. As such, my string would never match when using the constant, since the format would differ. You're right that it would make more sense to split it up into pairs and analyze them that way, so even my use case is moot. If the constant cannot be changed, as you said, of if the behaviour is simply in line with your design, then we can mark this WONTFIX. It would seem that my "issue" was, at best, an extreme corner case, and one with a really easy workaround. Thanks for your time. ------------------------------------------------------------------------ [2015-01-30 10:43:02] derick@php.net It's a controversial issue. In the code, I reference: * This comes from various sources that like to contradict. I'm going with the * format here because of: * http://msdn.microsoft.com/en-us/library/windows/desktop/aa384321%28v=vs.85%29.aspx * and http://curl.haxx.se/rfc/cookie_spec.html I've just had a quick look at the RFCs you mentioned: - RFC 6265: Doesn't seem to mention the weekday part at all: http://tools.ietf.org/html/rfc6265#section-5.1.1 - RFC 2109, section 10.1.2, refers to the original netscape spec, and uses "Wdy, DD-Mon-YY HH:MM:SS GMT" (Wdy is not specified) - Original netscape spec uses: "Wdy, DD-Mon-YY HH:MM:SS GMT" (http://curl.haxx.se/rfc/cookie_spec.html). Wdy is not specified. - The netscape spec also references: - RFC 822, section 5.1, which uses: day = "Mon" / "Tue" / "Wed" / "Thu" / "Fri" / "Sat" / "Sun" - RFC 850, section 2, which refers to "Saturday, 1-Jan-83 00:00:00 EST" as the new format, and "Fri Nov 19 16:59:30 1982" as the old format - RFC 1036, which uses "Date: Fri, 19 Nov 82 16:14:55 GMT" - RFC 1123, section 5.1.14, which only states "The syntax for the date is hereby changed to: date = 1*2DIGIT month 2*4DIGIT", as compared to RFC 822 - The MSFT spec (https://msdn.microsoft.com/en-us/library/windows/desktop/aa384321%28v=vs.85%29.aspx) uses "DAY - The day of the week (Sun, Mon, Tue, Wed, Thu, Fri, Sat)." If your only issue is "I tried to parse the Set-Cookie header and DateTime::COOKIE seemed like the most obvious choice." - I guess with date_parse_from_format() or date_create_from_format()? - then it shouldn't matter, as using either "D" or "l" there allows for either the short or long form: <?php $all = []; $all[] = date_create_from_format(DateTime::COOKIE, "Fri, 19-Nov-1982 16:14:55 GMT"); $all[] = date_create_from_format(DateTime::COOKIE, "Friday, 19-Nov-1982 16:14:55 GMT"); $all[] = date_create_from_format("l, d-M-Y H:i:s T", "Fri, 19-Nov-1982 16:14:55 GMT"); $all[] = date_create_from_format("l, d-M-Y H:i:s T", "Friday, 19-Nov-1982 16:14:55 GMT"); $all[] = date_create_from_format("D, d-M-Y H:i:s T", "Fri, 19-Nov-1982 16:14:55 GMT"); foreach ( $all as $one ) { echo $one->format(DateTime::COOKIE), "\n"; } ?> Which outputs: Friday, 19-Nov-1982 16:14:55 GMT Friday, 19-Nov-1982 16:14:55 GMT Friday, 19-Nov-1982 16:14:55 GMT Friday, 19-Nov-1982 16:14:55 GMT Friday, 19-Nov-1982 16:14:55 GMT -------------------- From the new evidence, it probably should have been "Fri" - but we can not add an INI setting for this (clearly), and also not change the current constant. ------------------------------------------------------------------------ [2015-01-30 05:16:53] AgentConundrum at gmail dot com Sorry for the confusion. I wasn't requesting that the value created by setcookie() be changed. I understand the reasons why that value is used. My comment was regarding the DateTime::COOKIE constant specifically. That constant uses a different format than the one sent to browsers, and I'm not sure why. The only discrepancy is the weekday format - the browser gets the short version, the constant uses the verbose version. I only ran into this when writing a unit test for a toy I'm making. I tried to parse the Set-Cookie header and DateTime::COOKIE seemed like the most obvious choice. When it failed, I was intrigued, so I dug into it a bit. It's a simple workaround for me - I can explicitly define the format sent in the header and use that for comparison - but, as it was not clear why the constant is defined this way, I thought it was a bug. Perhaps you could elaborate on the intended use case of the constant, and why using a non-standard format is the correct choice? I could definitely be missing the obvious here. ------------------------------------------------------------------------ [2015-01-30 04:41:21] yohgaki@php.net This cannot be fixed easily. Cookie header defined by RFC is not what people/browsers use/expect. By confirming RFC, there may be compatibility issues. Nobody knows the impact. Supporting non standard format may be the best way. RFC conformation INI would be nice to have. DateTime::COOKIE_COMPAT? cookie_compat=On/Off? (On by default) ------------------------------------------------------------------------ [2015-01-30 03:21:10] AgentConundrum at gmail dot com Used wrong version option. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=68954 -- Edit this bug report at https://bugs.php.net/bug.php?id=68954&edit=1

« previous php.bugs (#241500) next »