Testing Cookie Scenarios - Visual Guide

This guide provides step-by-step instructions and visual flows for testing different cookie scenarios in the playground. Each scenario includes Mermaid diagrams showing the complete request/response flow.

Table of Contents

  1. Basic Cookie Setting and Reading
  2. SameSite Attribute Testing
  3. Domain Attribute Testing
  4. Cross-Domain Cookie Scenarios
  5. Parent-Subdomain Cookie Sharing
  6. Secure Flag Testing
  7. Pixel Tracking Scenarios
  8. Redirect Cookie Behavior

Objective: Understand basic cookie lifecycle - setting, storing, and reading.

Test Steps:

  1. Navigate to cookie-playground.pun7o.click
  2. Open Browser Developer Tools (F12)
  3. Go to Application → Cookies
  4. Fill cookie form:
    • Name: test_cookie
    • Value: test_value
    • Path: /
  5. Click "Set Cookie"
  6. Click "Read All Cookies"

Flow Diagram:

sequenceDiagram participant User participant Browser participant Playground as Main Domain
(cookie-playground.pun7o.click) participant Storage as Cookie Storage User->>Browser: Navigate to cookie-playground.pun7o.click Browser->>Playground: GET / HTTP/1.1 Playground->>Browser: HTTP 200 OK
Content-Type: text/html
Cookie playground page Browser->>User: Display playground interface User->>Browser: Fill form: name=test_cookie
value=test_value
Click Set Cookie Browser->>Browser: "Execute JavaScript
document.cookie = test_cookie=test_value#59; Path=/" Browser->>Storage: Store cookie
name: test_cookie, value: test_value, path: / Storage-->>Browser: Cookie stored Browser->>User: Show success message User->>Browser: Click Read All Cookies Browser->>Browser: Execute document.cookie Browser->>Storage: Retrieve cookies for domain Storage-->>Browser: Return: test_cookie=test_value Browser->>User: Display cookie in interface

What to Observe:

SameSite Attribute Testing

Scenario 1: SameSite=Lax (Default)

Objective: Understand how SameSite=Lax cookies work with top-level navigation.

Test Steps:

  1. Visit cookie-playground.pun7o.click
  2. Set cookie: session=abc123; SameSite=Lax; Path=/
  3. Open new tab and navigate directly to cookie-playground.pun7o.click
  4. Check if cookie is sent

Flow Diagram - Top-Level Navigation:

sequenceDiagram participant User participant Browser participant Main as Main Domain
(cookie-playground.pun7o.click) participant Storage as Cookie Storage User->>Browser: Visit cookie-playground.pun7o.click Browser->>Main: GET / HTTP/1.1 Main->>Browser: HTTP 200 OK
Set-Cookie: session=abc123
SameSite=Lax
Path=/ Browser->>Storage: Store cookie with SameSite=Lax Note over User: User types URL or clicks bookmark User->>Browser: Navigate to cookie-playground.pun7o.click Browser->>Browser: Check: Top-level navigation? YES Browser->>Browser: Check: SameSite=Lax? YES → Allow Browser->>Storage: Retrieve cookies for cookie-playground.pun7o.click Storage-->>Browser: Return: session=abc123 Browser->>Main: GET / HTTP/1.1
Cookie: session=abc123 Main->>Browser: HTTP 200 OK Note over Browser,Main: Cookie sent because SameSite=Lax
allows top-level navigation

Scenario 2: SameSite=Strict

Objective: Understand how SameSite=Strict prevents cookie sending in cross-site contexts.

Test Steps:

  1. Visit site-a.cookie-playground.pun7o.click
  2. Set cookie: strict_session=xyz789; SameSite=Strict; Path=/
  3. From site-b.cookie-playground.pun7o.click , add an iframe pointing to site-a.cookie-playground.pun7o.click
  4. Check if cookie is sent

Flow Diagram - SameSite=Strict Cross-Site:

sequenceDiagram participant User participant Browser participant SubA as Subdomain A
(site-a.cookie-playground.pun7o.click) participant SubB as Subdomain B
(site-b.cookie-playground.pun7o.click) participant Storage as Cookie Storage User->>Browser: Visit site-a.cookie-playground.pun7o.click Browser->>SubA: GET / HTTP/1.1 SubA->>Browser: HTTP 200 OK
Set-Cookie: strict_session=xyz789
SameSite=Strict
Path=/ Browser->>Storage: Store cookie with SameSite=Strict User->>Browser: Navigate to site-b.cookie-playground.pun7o.click Browser->>SubB: GET / HTTP/1.1 SubB->>Browser: HTTP 200 OK
HTML with iframe pointing to a.main Browser->>Browser: Load iframe: site-a.cookie-playground.pun7o.click Browser->>Browser: Check: Same-origin navigation? NO Browser->>Browser: Check: SameSite=Strict? YES → Block Note over Browser: Cookie NOT sent because
cross-site request and SameSite=Strict Browser->>SubA: GET / HTTP/1.1
Cookie: (none) SubA->>Browser: HTTP 200 OK
Content (without cookie)

Scenario 3: SameSite=None with Secure

Objective: Understand how SameSite=None requires Secure flag for cross-site cookies.

Test Steps:

  1. Visit site-a.cookie-playground.pun7o.click
  2. Set cookie: cross_site=test123; SameSite=None; Secure; Path=/
  3. From site-b.cookie-playground.pun7o.click , load pixel from site-a.cookie-playground.pun7o.click
  4. Check if cookie is sent

Flow Diagram - SameSite=None Cross-Site:

sequenceDiagram participant User participant Browser participant SubA as Subdomain A
(site-a.cookie-playground.pun7o.click) participant SubB as Subdomain B
(site-b.cookie-playground.pun7o.click) participant Storage as Cookie Storage User->>Browser: Visit site-a.cookie-playground.pun7o.click Browser->>SubA: GET / HTTP/1.1 SubA->>Browser: HTTP 200 OK
Set-Cookie: cross_site=test123
SameSite=None
Secure
Path=/ Browser->>Storage: Store cookie with SameSite=None + Secure User->>Browser: Navigate to site-b.cookie-playground.pun7o.click Browser->>SubB: GET / HTTP/1.1 SubB->>Browser: HTTP 200 OK
HTML with pixel: a.main/pixel Browser->>Browser: Load pixel from a.main Browser->>Browser: Check: SameSite=None? YES Browser->>Browser: Check: Secure flag? YES Browser->>Browser: Check: HTTPS? YES → Allow Browser->>Storage: Retrieve cookies for site-a.cookie-playground.pun7o.click Storage-->>Browser: Return: cross_site=test123 Browser->>SubA: GET /pixel HTTP/1.1
Cookie: cross_site=test123 Note over Browser,SubA: Cookie sent because SameSite=None
allows cross-site requests SubA->>Browser: HTTP 200 OK
1x1 GIF

Domain Attribute Testing

Objective: Test how cookies with Domain=cookie-playground.pun7o.click are accessible from subdomains.

Test Steps:

  1. Visit cookie-playground.pun7o.click
  2. Set cookie: shared_session=parent123; Domain=cookie-playground.pun7o.click; Path=/
  3. Navigate to site-a.cookie-playground.pun7o.click
  4. Check if cookie is accessible
  5. Navigate to site-b.cookie-playground.pun7o.click
  6. Check if cookie is accessible

Flow Diagram - Parent Domain Cookie Sharing:

sequenceDiagram participant User participant Browser participant Parent as Parent Domain
(cookie-playground.pun7o.click) participant SubA as Subdomain A
(site-a.cookie-playground.pun7o.click) participant SubB as Subdomain B
(site-b.cookie-playground.pun7o.click) participant Storage as Cookie Storage User->>Browser: Visit cookie-playground.pun7o.click Browser->>Parent: GET / HTTP/1.1 Parent->>Browser: HTTP 200 OK
Set-Cookie: shared_session=parent123
Domain=cookie-playground.pun7o.click
Path=/ Browser->>Storage: Store cookie
name: shared_session, domain: cookie-playground.pun7o.click Note over Browser,Storage: Cookie stored with parent domain User->>Browser: Navigate to site-a.cookie-playground.pun7o.click Browser->>Browser: Check cookies for a.main Browser->>Storage: Query cookies
Domain match? cookie-playground.pun7o.click
Subdomain? site-a.cookie-playground.pun7o.click → YES Storage-->>Browser: Return: shared_session=parent123 Browser->>SubA: GET / HTTP/1.1
Cookie: shared_session=parent123 Note over Browser,SubA: Cookie accessible because
Domain=cookie-playground.pun7o.click
includes subdomains SubA->>Browser: HTTP 200 OK User->>Browser: Navigate to site-b.cookie-playground.pun7o.click Browser->>Browser: Check cookies for b.main Browser->>Storage: Query cookies
Domain match? cookie-playground.pun7o.click
Subdomain? site-b.cookie-playground.pun7o.click → YES Storage-->>Browser: Return: shared_session=parent123 Browser->>SubB: GET / HTTP/1.1
Cookie: shared_session=parent123 Note over Browser,SubB: Cookie also accessible from subdomain B SubB->>Browser: HTTP 200 OK

Objective: Test how cookies with Domain=site-a.cookie-playground.pun7o.click are NOT accessible from parent or other subdomains.

Test Steps:

  1. Visit site-a.cookie-playground.pun7o.click
  2. Set cookie: subdomain_only=abc; Domain=site-a.cookie-playground.pun7o.click; Path=/
  3. Navigate to cookie-playground.pun7o.click
  4. Check if cookie is accessible (should NOT be)
  5. Navigate to site-b.cookie-playground.pun7o.click
  6. Check if cookie is accessible (should NOT be)

Flow Diagram - Subdomain-Specific Cookie:

sequenceDiagram participant User participant Browser participant SubA as Subdomain A
(site-a.cookie-playground.pun7o.click) participant Parent as Parent Domain
(cookie-playground.pun7o.click) participant SubB as Subdomain B
(site-b.cookie-playground.pun7o.click) participant Storage as Cookie Storage User->>Browser: Visit site-a.cookie-playground.pun7o.click Browser->>SubA: GET / HTTP/1.1 SubA->>Browser: HTTP 200 OK
Set-Cookie: subdomain_only=abc
Domain=site-a.cookie-playground.pun7o.click
Path=/ Browser->>Storage: Store cookie
name: subdomain_only, domain: site-a.cookie-playground.pun7o.click Note over Browser,Storage: Cookie stored with subdomain-specific domain User->>Browser: Navigate to cookie-playground.pun7o.click Browser->>Browser: Check cookies for main Browser->>Storage: Query cookies
Domain match? site-a.cookie-playground.pun7o.click
Current domain? cookie-playground.pun7o.click → NO MATCH Storage-->>Browser: Return: (no matching cookies) Browser->>Parent: GET / HTTP/1.1
Cookie: (none) Note over Browser,Parent: Cookie NOT accessible because
Domain=site-a.cookie-playground.pun7o.click
does not match cookie-playground.pun7o.click Parent->>Browser: HTTP 200 OK User->>Browser: Navigate to site-b.cookie-playground.pun7o.click Browser->>Browser: Check cookies for b.main Browser->>Storage: Query cookies
Domain match? site-a.cookie-playground.pun7o.click
Current domain? site-b.cookie-playground.pun7o.click → NO MATCH Storage-->>Browser: Return: (no matching cookies) Browser->>SubB: GET / HTTP/1.1
Cookie: (none) Note over Browser,SubB: Cookie NOT accessible from
different subdomain SubB->>Browser: HTTP 200 OK

Scenario: Third-Party Pixel Tracking

Objective: Test how cookies work when loading a pixel from a different subdomain.

Test Steps:

  1. Visit site-a.cookie-playground.pun7o.click
  2. Load page containing pixel: <img src="https://site-b.cookie-playground.pun7o.click/pixel?id=123" />
  3. Check Network tab for pixel request
  4. Check if cookies from site-b.cookie-playground.pun7o.click are sent

Flow Diagram - Third-Party Pixel:

sequenceDiagram participant User participant Browser participant SubA as Subdomain A
(site-a.cookie-playground.pun7o.click) participant SubB as Subdomain B
(site-b.cookie-playground.pun7o.click) participant Storage as Cookie Storage participant CloudWatch User->>Browser: Visit site-a.cookie-playground.pun7o.click Browser->>SubA: GET / HTTP/1.1 SubA->>Browser: HTTP 200 OK
HTML with pixel tag:
<img src="b.main/pixel?id=123" /> Browser->>User: Display page Browser->>Browser: Parse HTML, find pixel tag Browser->>Browser: Check: Cross-origin request? YES
(different subdomain) Browser->>Storage: Query cookies for site-b.cookie-playground.pun7o.click Storage-->>Browser: Return cookies (if any exist) Browser->>SubB: GET /pixel?id=123 HTTP/1.1
Cookie: (cookies from b.main if SameSite allows) Note over Browser,SubB: Third-party request
Cookies sent based on SameSite policy SubB->>CloudWatch: Log pixel request
queryParams: id=123, cookies: ... SubB->>Browser: HTTP 200 OK
Content-Type: image/gif
1x1 transparent GIF Browser->>User: Render pixel (invisible)

Scenario: Shared Session Across Subdomains

Objective: Test setting a cookie on parent domain and accessing it from subdomains.

Test Steps:

  1. Visit cookie-playground.pun7o.click/parent-subdomain-test.html
  2. Click "Set Cookie on Parent Domain"
  3. Verify cookie is set with Domain=cookie-playground.pun7o.click
  4. Navigate to site-a.cookie-playground.pun7o.click
  5. Check if cookie is accessible
  6. Navigate to site-b.cookie-playground.pun7o.click
  7. Check if cookie is accessible

Flow Diagram - Shared Session:

sequenceDiagram participant User participant Browser participant Parent as Parent Domain
(cookie-playground.pun7o.click) participant SubA as Subdomain A
(site-a.cookie-playground.pun7o.click) participant SubB as Subdomain B
(site-b.cookie-playground.pun7o.click) participant Storage as Cookie Storage User->>Browser: Visit cookie-playground.pun7o.click/parent-subdomain-test.html Browser->>Parent: GET /parent-subdomain-test.html HTTP/1.1 Parent->>Browser: HTTP 200 OK
Parent-subdomain test page Browser->>User: Display test interface User->>Browser: Click Set Cookie on Parent Domain Browser->>Browser: "Execute JavaScript
document.cookie = session=shared123#59; Domain=cookie-playground.pun7o.click#59; Path=/" Browser->>Storage: Store cookie
name: session, domain: cookie-playground.pun7o.click Storage-->>Browser: Cookie stored Browser->>User: Show confirmation User->>Browser: Navigate to site-a.cookie-playground.pun7o.click Browser->>Storage: Query cookies
Current domain: site-a.cookie-playground.pun7o.click
Match domain: cookie-playground.pun7o.click → YES (subdomain) Storage-->>Browser: Return: session=shared123 Browser->>SubA: GET / HTTP/1.1
Cookie: session=shared123 Note over Browser,SubA: Cookie accessible because
a.main is subdomain of main SubA->>Browser: HTTP 200 OK User->>Browser: Navigate to site-b.cookie-playground.pun7o.click Browser->>Storage: Query cookies
Current domain: site-b.cookie-playground.pun7o.click
Match domain: cookie-playground.pun7o.click → YES (subdomain) Storage-->>Browser: Return: session=shared123 Browser->>SubB: GET / HTTP/1.1
Cookie: session=shared123 Note over Browser,SubB: Cookie also accessible
from subdomain B SubB->>Browser: HTTP 200 OK

Secure Flag Testing

Objective: Verify Secure flag works correctly on HTTPS connections.

Test Steps:

  1. Visit cookie-playground.pun7o.click (HTTPS)
  2. Set cookie: secure_cookie=test; Secure; Path=/
  3. Check in Developer Tools that cookie has Secure flag
  4. Verify cookie is sent with subsequent HTTPS requests
  5. Try to access via HTTP (if available) - cookie should NOT be sent

Flow Diagram - Secure Flag:

sequenceDiagram participant User participant Browser participant Playground as Main Domain
(HTTPS) participant Storage as Cookie Storage User->>Browser: Visit https://cookie-playground.pun7o.click Browser->>Playground: GET / HTTP/1.1 (HTTPS) Playground->>Browser: HTTP 200 OK
Set-Cookie: secure_cookie=test
Secure
Path=/ Browser->>Browser: Verify: Connection is HTTPS? YES Browser->>Storage: Store cookie with Secure flag
name: secure_cookie, secure: true Storage-->>Browser: Cookie stored Note over User: User navigates to another page Browser->>Browser: Prepare request to cookie-playground.pun7o.click Browser->>Browser: Check: Connection is HTTPS? YES Browser->>Browser: Check: Cookie has Secure flag? YES → Allow Browser->>Storage: Retrieve cookies Storage-->>Browser: Return: secure_cookie=test Browser->>Playground: GET /page HTTP/1.1 (HTTPS)
Cookie: secure_cookie=test Note over Browser,Playground: Cookie sent because
Secure flag matches HTTPS connection Playground->>Browser: HTTP 200 OK

Pixel Tracking Scenarios

Objective: Test how pixel requests can sync cookies across domains for tracking.

Test Steps:

  1. Visit site-a.cookie-playground.pun7o.click
  2. Set cookie: user_id=abc123; SameSite=None; Secure; Path=/
  3. Page contains pixel: <img src="https://site-b.cookie-playground.pun7o.click/pixel?user=abc123" />
  4. Check Network tab for pixel request
  5. Check CloudWatch logs for logged query parameters

Flow Diagram - Cookie Sync Pixel:

sequenceDiagram participant User participant Browser participant SubA as Subdomain A
(site-a.cookie-playground.pun7o.click) participant SubB as Subdomain B
(site-b.cookie-playground.pun7o.click) participant CloudWatch participant Storage as Cookie Storage User->>Browser: Visit site-a.cookie-playground.pun7o.click Browser->>SubA: GET / HTTP/1.1 SubA->>Browser: HTTP 200 OK
Set-Cookie: user_id=abc123
SameSite=None
Secure
Path=/ Browser->>Storage: Store cookie for a.main SubA->>Browser: HTML with pixel:
<img src="b.main/pixel?user=abc123" /> Browser->>User: Display page Browser->>Browser: Parse HTML, load pixel Browser->>Storage: Query cookies for b.main Storage-->>Browser: Return cookies (if any) Browser->>SubB: GET /pixel?user=abc123 HTTP/1.1
Cookie: (b.main cookies if any) SubB->>SubB: Extract user=abc123 from query params SubB->>SubB: Match with user database SubB->>CloudWatch: Log sync event
user: abc123, timestamp: ... SubB->>Browser: HTTP 200 OK
Set-Cookie: tracker_id=xyz789
SameSite=None
Secure
1x1 GIF Browser->>Storage: Store cookie for b.main Note over Browser,SubB: Cookie sync complete
Both domains can identify same user

Objective: Test how cookies behave when following HTTP redirects.

Test Steps:

  1. Visit site-c.cookie-playground.pun7o.click
  2. Observe 301 redirect to site-a.cookie-playground.pun7o.click
  3. Check if cookies set on redirect domain are preserved
  4. Check if cookies from target domain are accessible

Flow Diagram - Redirect with Cookies:

sequenceDiagram participant User participant Browser participant Redirect as Redirect Domain
(site-c.cookie-playground.pun7o.click) participant Target as Target Domain
(site-a.cookie-playground.pun7o.click) participant Storage as Cookie Storage User->>Browser: Visit site-c.cookie-playground.pun7o.click Browser->>Redirect: GET / HTTP/1.1 Redirect->>Browser: HTTP 301 Moved Permanently
Location: https://site-a.cookie-playground.pun7o.click/ Browser->>Browser: Process redirect (automatic) Browser->>Target: GET / HTTP/1.1
Cookie: (cookies if any from redirect domain) Note over Browser,Target: Browser automatically follows redirect
Cookies sent based on SameSite policy Target->>Browser: HTTP 200 OK
Content-Type: text/html Browser->>User: Display target page Note over User: User interacts with target page User->>Browser: Set cookie on target domain Browser->>Browser: "Execute JavaScript
document.cookie = session=xyz#59; Domain=site-a.cookie-playground.pun7o.click" Browser->>Storage: Store cookie for target domain Storage-->>Browser: Cookie stored

Testing Checklist

Use this checklist to verify each scenario:

SameSite Attributes

Domain Attribute

Secure Flag

Cross-Domain Scenarios

Redirect Behavior

Tips for Testing

  1. Use Browser Developer Tools:

    • Network tab: See all HTTP requests/responses
    • Application tab: View stored cookies
    • Console tab: Execute JavaScript cookie commands
  2. Clear State Between Tests:

    • Clear cookies and cache
    • Use Incognito/Private mode
    • Start with clean browser state
  3. Verify in Multiple Browsers:

    • Chrome/Edge (Chromium)
    • Firefox
    • Safari
    • Different browsers may handle cookies differently
  4. Check CloudWatch Logs:

    • Pixel requests are logged
    • Query parameters captured
    • Request headers visible
  5. Test Edge Cases:

    • Very long cookie values
    • Special characters in cookie names/values
    • Expired cookies (Max-Age=0)
    • Multiple cookies with same name, different paths

Next Steps

After completing these scenarios:

  1. Review Cookie Fundamentals for theory
  2. Check Cookie Attributes for details
  3. Explore Marketing Use Cases for real-world examples
  4. Read Troubleshooting if you encounter issues