get_existing_key(); if ($existing !== '') { return $existing; } if (!$create) { return ''; } $session_key = wp_generate_uuid4(); $this->persist_cookie($session_key); return $session_key; } /** * Persist the wishlist session cookie. * * @param string $session_key Session key to store. * @return void */ public function persist_cookie(string $session_key): void { if ($session_key === '' || headers_sent()) { return; } setcookie( self::COOKIE_NAME, $session_key, $this->cookie_options(time() + self::COOKIE_TTL_SECONDS) ); $_COOKIE[self::COOKIE_NAME] = $session_key; } /** * Clear the wishlist session cookie. * * @return void */ public function clear(): void { self::expire_if_present(); } /** * Drop a leftover guest cookie without minting a new one. * * @return void */ public static function expire_if_present(): void { if (empty($_COOKIE[self::COOKIE_NAME]) || headers_sent()) { return; } setcookie( self::COOKIE_NAME, '', (new self())->cookie_options(time() - YEAR_IN_SECONDS) ); unset($_COOKIE[self::COOKIE_NAME]); } /** * Shared cookie flags for set and expire. * * @param int $expires Unix expiry timestamp. * @return array setcookie options. */ private function cookie_options(int $expires): array { return [ 'expires' => $expires, 'path' => COOKIEPATH ? COOKIEPATH : '/', 'secure' => is_ssl(), 'httponly' => true, 'samesite' => 'Lax', ]; } }