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
- Basic Cookie Setting and Reading
- SameSite Attribute Testing
- Domain Attribute Testing
- Cross-Domain Cookie Scenarios
- Parent-Subdomain Cookie Sharing
- Secure Flag Testing
- Pixel Tracking Scenarios
- Redirect Cookie Behavior
Basic Cookie Setting and Reading
Scenario: Set and Read a Simple Cookie
Objective: Understand basic cookie lifecycle - setting, storing, and reading.
Test Steps:
- Navigate to cookie-playground.pun7o.click
- Open Browser Developer Tools (F12)
- Go to Application → Cookies
- Fill cookie form:
- Name:
test_cookie - Value:
test_value - Path:
/
- Name:
- Click "Set Cookie"
- Click "Read All Cookies"
Flow Diagram:
(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:
- Cookie appears in Developer Tools → Application → Cookies
- Cookie value matches what was set
- Cookie accessible via
document.cookiein Console - Cookie persists after page refresh
SameSite Attribute Testing
Scenario 1: SameSite=Lax (Default)
Objective: Understand how SameSite=Lax cookies work with top-level navigation.
Test Steps:
- Visit cookie-playground.pun7o.click
- Set cookie:
session=abc123; SameSite=Lax; Path=/ - Open new tab and navigate directly to cookie-playground.pun7o.click
- Check if cookie is sent
Flow Diagram - Top-Level Navigation:
(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:
- Visit site-a.cookie-playground.pun7o.click
- Set cookie:
strict_session=xyz789; SameSite=Strict; Path=/ - From site-b.cookie-playground.pun7o.click
, add an iframe pointing to
site-a.cookie-playground.pun7o.click - Check if cookie is sent
Flow Diagram - SameSite=Strict Cross-Site:
(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:
- Visit site-a.cookie-playground.pun7o.click
- Set cookie:
cross_site=test123; SameSite=None; Secure; Path=/ - From site-b.cookie-playground.pun7o.click
, load pixel from
site-a.cookie-playground.pun7o.click - Check if cookie is sent
Flow Diagram - SameSite=None Cross-Site:
(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
Scenario: Parent Domain Cookie Access
Objective: Test how cookies with Domain=cookie-playground.pun7o.click are accessible from subdomains.
Test Steps:
- Visit cookie-playground.pun7o.click
- Set cookie:
shared_session=parent123; Domain=cookie-playground.pun7o.click; Path=/ - Navigate to site-a.cookie-playground.pun7o.click
- Check if cookie is accessible
- Navigate to site-b.cookie-playground.pun7o.click
- Check if cookie is accessible
Flow Diagram - Parent Domain Cookie Sharing:
(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
Scenario: Subdomain-Specific Cookie
Objective: Test how cookies with Domain=site-a.cookie-playground.pun7o.click are NOT accessible from parent or other subdomains.
Test Steps:
- Visit site-a.cookie-playground.pun7o.click
- Set cookie:
subdomain_only=abc; Domain=site-a.cookie-playground.pun7o.click; Path=/ - Navigate to cookie-playground.pun7o.click
- Check if cookie is accessible (should NOT be)
- Navigate to site-b.cookie-playground.pun7o.click
- Check if cookie is accessible (should NOT be)
Flow Diagram - Subdomain-Specific Cookie:
(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
Cross-Domain Cookie Scenarios
Scenario: Third-Party Pixel Tracking
Objective: Test how cookies work when loading a pixel from a different subdomain.
Test Steps:
- Visit site-a.cookie-playground.pun7o.click
- Load page containing pixel:
<img src="https://site-b.cookie-playground.pun7o.click/pixel?id=123" /> - Check Network tab for pixel request
- Check if cookies from
site-b.cookie-playground.pun7o.clickare sent
Flow Diagram - Third-Party Pixel:
(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)
Parent-Subdomain Cookie Sharing
Scenario: Shared Session Across Subdomains
Objective: Test setting a cookie on parent domain and accessing it from subdomains.
Test Steps:
- Visit cookie-playground.pun7o.click/parent-subdomain-test.html
- Click "Set Cookie on Parent Domain"
- Verify cookie is set with Domain=cookie-playground.pun7o.click
- Navigate to site-a.cookie-playground.pun7o.click
- Check if cookie is accessible
- Navigate to site-b.cookie-playground.pun7o.click
- Check if cookie is accessible
Flow Diagram - Shared Session:
(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
Scenario: Secure Cookie on HTTPS
Objective: Verify Secure flag works correctly on HTTPS connections.
Test Steps:
- Visit cookie-playground.pun7o.click (HTTPS)
- Set cookie:
secure_cookie=test; Secure; Path=/ - Check in Developer Tools that cookie has Secure flag
- Verify cookie is sent with subsequent HTTPS requests
- Try to access via HTTP (if available) - cookie should NOT be sent
Flow Diagram - Secure Flag:
(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
Scenario: Cookie Sync via Pixel
Objective: Test how pixel requests can sync cookies across domains for tracking.
Test Steps:
- Visit site-a.cookie-playground.pun7o.click
- Set cookie:
user_id=abc123; SameSite=None; Secure; Path=/ - Page contains pixel:
<img src="https://site-b.cookie-playground.pun7o.click/pixel?user=abc123" /> - Check Network tab for pixel request
- Check CloudWatch logs for logged query parameters
Flow Diagram - Cookie Sync Pixel:
(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
Redirect Cookie Behavior
Scenario: Cookie Preservation Through Redirect
Objective: Test how cookies behave when following HTTP redirects.
Test Steps:
- Visit site-c.cookie-playground.pun7o.click
- Observe 301 redirect to site-a.cookie-playground.pun7o.click
- Check if cookies set on redirect domain are preserved
- Check if cookies from target domain are accessible
Flow Diagram - Redirect with Cookies:
(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:
Basic Cookie Operations
- Set cookie via form
- Read cookie via JavaScript
- Cookie persists after page refresh
- Cookie visible in Developer Tools
- Cookie accessible via
document.cookie
SameSite Attributes
- SameSite=Lax allows top-level navigation
- SameSite=Strict blocks cross-site requests
- SameSite=None requires Secure flag
- SameSite=None works with cross-site pixels
Domain Attribute
- Parent domain cookie accessible from subdomains
- Subdomain cookie NOT accessible from parent
- Subdomain cookie NOT accessible from other subdomains
- Domain attribute affects cookie scope correctly
Secure Flag
- Secure cookie stored on HTTPS
- Secure cookie sent with HTTPS requests
- Secure cookie NOT sent with HTTP (if available)
Cross-Domain Scenarios
- Third-party pixel receives cookies (if SameSite allows)
- Cross-domain cookie sync works
- CloudWatch logs capture pixel requests
Redirect Behavior
- Redirect preserves cookies (if SameSite allows)
- Target domain receives redirected requests
- Cookies set on target domain work correctly
Tips for Testing
Use Browser Developer Tools:
- Network tab: See all HTTP requests/responses
- Application tab: View stored cookies
- Console tab: Execute JavaScript cookie commands
Clear State Between Tests:
- Clear cookies and cache
- Use Incognito/Private mode
- Start with clean browser state
Verify in Multiple Browsers:
- Chrome/Edge (Chromium)
- Firefox
- Safari
- Different browsers may handle cookies differently
Check CloudWatch Logs:
- Pixel requests are logged
- Query parameters captured
- Request headers visible
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:
- Review Cookie Fundamentals for theory
- Check Cookie Attributes for details
- Explore Marketing Use Cases for real-world examples
- Read Troubleshooting if you encounter issues