📖 Scenario: You are building a simple web app using Astro framework that needs to remember a user's name during their visit using cookies.This helps the app greet the user personally on each page load.
🎯 Goal: Create a cookie-based session management system in Astro that stores a user's name in a cookie and reads it back to display a greeting.
📋 What You'll Learn
Create a cookie named username with a fixed value
Set a cookie expiration time of 1 day
Read the username cookie from the request
Display a greeting message using the cookie value in the Astro component
💡 Why This Matters
🌍 Real World
Web apps often use cookies to remember users between page visits without requiring login every time.
💼 Career
Understanding cookie-based session management is essential for building user-friendly, stateful web applications.
Progress0 / 4 steps
1
Create a cookie with a fixed username
In your Astro server-side code (frontmatter), import cookies from 'astro:cookies' and use cookies().set('username', 'AstroUser') to create and set the cookie.
Astro
Hint
Use import { cookies } from 'astro:cookies'; then const cookieStore = cookies(); cookieStore.set('username', 'AstroUser');
2
Set cookie expiration to 1 day
Update the cookieStore.set() call by adding the maxAge option set to 86400 seconds (1 day).
Astro
Hint
Pass { maxAge: 86400 } as the third argument to cookieStore.set().
3
Read the username cookie from the cookieStore
Using the cookieStore, read the username cookie with cookieStore.get('username') and assign its value to a username const (default to 'Guest' if missing).
Astro
Hint
Use const username = cookieStore.get('username')?.value || 'Guest'; to read the cookie value safely.
4
Display greeting using the username cookie
In the Astro component template (after ---), use the username variable to display a greeting message like Hello, {username}! inside a <main> tag.
Astro
Hint
Use {username} inside the template to show the username from the frontmatter.
Practice
(1/5)
1. What is the main purpose of using cookies in cookie-based session management in Astro?
easy
A. To run server-side code faster
B. To store small pieces of data in the browser to remember user sessions
C. To style the webpage dynamically
D. To increase the size of the webpage
Solution
Step 1: Understand what cookies do
Cookies store small data on the user's browser to keep track of information like sessions.
Step 2: Identify the role in session management
Cookies help remember who the user is between page visits by storing session IDs or tokens.
Final Answer:
To store small pieces of data in the browser to remember user sessions -> Option B
Quick Check:
Cookies = store session data [OK]
Hint: Cookies remember user info in browser for sessions [OK]
Common Mistakes:
Thinking cookies speed up server code
Confusing cookies with styling tools
Believing cookies increase webpage size
2. Which of the following is the correct way to set a cookie named sessionId with value abc123 in Astro?
easy
A. setCookie('sessionId', 'abc123')
B. setCookie('sessionId', abc123)
C. setCookie(sessionId, 'abc123')
D. setCookie('sessionId' = 'abc123')
Solution
Step 1: Check function usage
Astro's setCookie takes the cookie name as a string and the value as a string.
Step 2: Validate syntax correctness
setCookie('sessionId', 'abc123') correctly passes both arguments as strings, matching the expected syntax.
Hint: Use quotes around both name and value strings [OK]
Common Mistakes:
Omitting quotes around value
Using variable without quotes for name
Using assignment syntax inside function call
3. Given this Astro server code snippet:
import { setCookie, getCookies } from 'astro:cookies';
export async function get({ request }) {
const cookies = getCookies(request);
if (!cookies.user) {
return new Response('No user cookie', { status: 401 });
}
setCookie('lastVisit', new Date().toISOString());
return new Response(`Welcome back, ${cookies.user}!`);
}
What will be the response if the request has a cookie user=Alice?
medium
A. Error: setCookie requires response object
B. Welcome back, Alice!
C. No user cookie
D. Welcome back, undefined!
Solution
Step 1: Check cookie presence
The code gets cookies from request and checks if cookies.user exists. With user=Alice, it passes the check.
Step 2: Identify the error in setCookie
setCookie('lastVisit', new Date().toISOString()) lacks the required first Response argument, causing a runtime error before returning the greeting.
Final Answer:
Error: setCookie requires response object -> Option A
Quick Check:
setCookie(response, name, value) [OK]
Hint: setCookie requires Response as first argument [OK]
Common Mistakes:
Overlooking incorrect setCookie usage
Assuming greeting returns despite error
Misreading cookie presence logic
4. Identify the error in this Astro code snippet for setting a secure cookie:
import { setCookie } from 'astro:cookies';
export async function post({ request }) {
setCookie('session', 'xyz', { secure: true });
return new Response('Session set');
}
medium
A. Missing await before setCookie
B. The cookie name cannot be 'session'
C. The secure option is invalid in Astro
D. setCookie must be called with the response object to attach cookie
Solution
Step 1: Understand setCookie usage
In Astro, to set a cookie on the response, you must attach it to the response headers, not just call setCookie alone.
Step 2: Identify missing response handling
The code calls setCookie but does not attach the cookie to the response, so the cookie won't be sent.
Final Answer:
setCookie must be called with the response object to attach cookie -> Option D
Quick Check:
Cookie needs response headers [OK]
Hint: Attach cookies to response headers to set them [OK]
Common Mistakes:
Calling setCookie without response context
Thinking secure option is unsupported
Forgetting to return response with cookie
5. You want to create a cookie-based session in Astro that expires in 1 hour and is only sent over HTTPS. Which of the following code snippets correctly sets this cookie?
hard
A. setCookie('sessionId', 'abc123', { maxAge: 3600, secure: false })
B. setCookie('sessionId', 'abc123', { expires: new Date(Date.now() + 3600), secure: false })
To expire in 1 hour, use maxAge: 3600 (seconds). One option uses it correctly with secure: true; another uses incorrect expires value.
Step 2: Verify secure and httpOnly flags
Secure must be true to send only over HTTPS. HttpOnly helps protect cookie from scripts.
Step 3: Compare options
Options with secure: false or incorrect expires fail. The snippet with maxAge: 3600, secure: true, httpOnly: true satisfies expiration, HTTPS-only, and adds security.