> */ function harvify_cookie_cookie_database() { return array( // WordPress core. array( 'name' => 'wordpress_logged_in_', 'match' => 'prefix', 'provider' => 'WordPress', 'purpose' => 'Keeps you logged in.', 'category' => 'necessary', 'expiry' => 'Session', ), array( 'name' => 'wordpress_sec_', 'match' => 'prefix', 'provider' => 'WordPress', 'purpose' => 'Secures admin areas.', 'category' => 'necessary', 'expiry' => 'Session', ), array( 'name' => 'wp-settings-', 'match' => 'prefix', 'provider' => 'WordPress', 'purpose' => 'Remembers admin UI preferences.', 'category' => 'preferences', 'expiry' => '1 year', ), array( 'name' => 'wordpress_test_cookie', 'match' => 'exact', 'provider' => 'WordPress', 'purpose' => 'Checks whether cookies are enabled.', 'category' => 'necessary', 'expiry' => 'Session', ), array( 'name' => 'comment_author_', 'match' => 'prefix', 'provider' => 'WordPress', 'purpose' => 'Remembers comment form details.', 'category' => 'preferences', 'expiry' => '1 year', ), // This plugin. array( 'name' => 'harvify_consent', 'match' => 'prefix', 'provider' => 'Harvify Cookie Consent', 'purpose' => 'Stores your cookie consent choices.', 'category' => 'necessary', 'expiry' => '1 year', ), // WooCommerce. array( 'name' => 'woocommerce_cart_hash', 'match' => 'exact', 'provider' => 'WooCommerce', 'purpose' => 'Tracks cart contents.', 'category' => 'necessary', 'expiry' => 'Session', ), array( 'name' => 'woocommerce_items_in_cart', 'match' => 'exact', 'provider' => 'WooCommerce', 'purpose' => 'Tracks cart item count.', 'category' => 'necessary', 'expiry' => 'Session', ), array( 'name' => 'wp_woocommerce_session_', 'match' => 'prefix', 'provider' => 'WooCommerce', 'purpose' => 'Holds your shopping session.', 'category' => 'necessary', 'expiry' => '2 days', ), // Google Analytics / Ads. array( 'name' => '_ga', 'match' => 'prefix', 'provider' => 'Google Analytics', 'purpose' => 'Distinguishes unique visitors.', 'category' => 'analytics', 'expiry' => '2 years', ), array( 'name' => '_gid', 'match' => 'exact', 'provider' => 'Google Analytics', 'purpose' => 'Distinguishes unique visitors.', 'category' => 'analytics', 'expiry' => '1 day', ), array( 'name' => '_gat', 'match' => 'prefix', 'provider' => 'Google Analytics', 'purpose' => 'Throttles the request rate.', 'category' => 'analytics', 'expiry' => '1 minute', ), array( 'name' => '_gcl_au', 'match' => 'exact', 'provider' => 'Google Ads', 'purpose' => 'Stores ad conversion data.', 'category' => 'marketing', 'expiry' => '3 months', ), // Facebook / Meta. array( 'name' => '_fbp', 'match' => 'exact', 'provider' => 'Meta (Facebook)', 'purpose' => 'Tracks visits across websites for advertising.', 'category' => 'marketing', 'expiry' => '3 months', ), array( 'name' => 'fr', 'match' => 'exact', 'provider' => 'Meta (Facebook)', 'purpose' => 'Delivers and measures advertising.', 'category' => 'marketing', 'expiry' => '3 months', ), // Other common. array( 'name' => '__stripe_mid', 'match' => 'exact', 'provider' => 'Stripe', 'purpose' => 'Fraud prevention for payments.', 'category' => 'necessary', 'expiry' => '1 year', ), array( 'name' => '__stripe_sid', 'match' => 'exact', 'provider' => 'Stripe', 'purpose' => 'Fraud prevention for payments.', 'category' => 'necessary', 'expiry' => '30 minutes', ), array( 'name' => 'YSC', 'match' => 'exact', 'provider' => 'YouTube', 'purpose' => 'Tracks views of embedded videos.', 'category' => 'marketing', 'expiry' => 'Session', ), array( 'name' => 'VISITOR_INFO1_LIVE', 'match' => 'exact', 'provider' => 'YouTube', 'purpose' => 'Estimates bandwidth for embedded videos.', 'category' => 'marketing', 'expiry' => '6 months', ), array( 'name' => '_hjSession', 'match' => 'prefix', 'provider' => 'Hotjar', 'purpose' => 'Holds analytics session data.', 'category' => 'analytics', 'expiry' => '30 minutes', ), array( 'name' => 'PHPSESSID', 'match' => 'exact', 'provider' => 'PHP', 'purpose' => 'Preserves the server session state.', 'category' => 'necessary', 'expiry' => 'Session', ), ); } } if ( ! function_exists( 'harvify_cookie_match_cookie' ) ) { /** * Find the best database entry for a cookie name. * * @param string $name Cookie name. * @return array|null Declaration-shaped match or null. */ function harvify_cookie_match_cookie( $name ) { $name = trim( (string) $name ); if ( '' === $name ) { return null; } foreach ( harvify_cookie_cookie_database() as $entry ) { $hit = 'prefix' === $entry['match'] ? ( 0 === strpos( $name, $entry['name'] ) ) : ( $name === $entry['name'] ); if ( $hit ) { return array( 'name' => $name, 'provider' => $entry['provider'], 'purpose' => $entry['purpose'], 'category' => $entry['category'], 'expiry' => $entry['expiry'], ); } } return null; } } if ( ! function_exists( 'harvify_cookie_inferred_cookies' ) ) { /** * Cookies this site is very likely to set, inferred from the environment * (active plugins / core), even if the scanning browser hasn't seen them yet. * * @return array> */ function harvify_cookie_inferred_cookies() { $out = array(); $add = function ( $sample ) use ( &$out ) { $m = harvify_cookie_match_cookie( $sample ); if ( $m ) { $out[ $m['name'] ] = $m; } }; // Always present. $add( 'harvify_consent' ); $add( 'wordpress_test_cookie' ); $add( 'wp-settings-1' ); // WooCommerce. if ( class_exists( 'WooCommerce' ) ) { $add( 'woocommerce_cart_hash' ); $add( 'woocommerce_items_in_cart' ); $add( 'wp_woocommerce_session_1' ); } return array_values( $out ); } }