Browsers are phasing out third-party cookies, and CHIPS (Cookies Having Independent Partitioned State) is a way to keep some of them working. A cookie marked Partitioned gets a separate cookie jar for each top-level site, so a service embedded on two sites can't use that cookie to track you across both. This RFC from Dmitrii Derepko and Niels Dossche adds a partitioned option to PHP's cookie and session functions.
Why change it
PHP had no option for this, so frameworks and apps had to write the Set-Cookie header by hand. The feature was first requested in a php-src issue.
According to the RFC, Chromium-based browsers and Firefox support CHIPS. Firefox enabled it fully in version 141, and Safari added it in 18.4.
Show me
setcookie("name", "value", ["secure" => true, "partitioned" => true]); // will result in headers: // Set-Cookie: name=value; secure; Partitioned
Only the array form of setcookie() and setrawcookie() gets the new option, which is how the samesite option was added too.
A partitioned cookie must also be secure, and leaving out secure throws an error:
setcookie("name", "value", ["partitioned" => true]); // Uncaught ValueError: setcookie(): "partitioned" option cannot be used without "secure" option in ...
Sessions are covered as well:
session_set_cookie_params(["secure" => true, "partitioned" => true]); session_start();
session_start() accepts a new cookie_partitioned option, and session_get_cookie_params() now returns a partitioned key. There's also a new session.cookie_partitioned ini setting, which is off by default.
For sessions, PHP checks the secure requirement when the session starts. If it fails, session_start() emits a warning and returns false. The check waits until then because the settings can come from several places, like ini_set().
What it means for existing code
Nothing breaks, since the option is off unless you turn it on. C extensions that call the internal php_setcookie function get one extra argument.
The vote
Accepted. Voting closed on August 12, 2025 with 25 in favor and none against, clearing the two-thirds majority it needed. It was merged into PHP 8.5.