Bird
Raised Fist0
Astroframework~20 mins

Cookie-based session management in Astro - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Astro Cookie Session Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
What happens when a cookie is missing in Astro session management?
Consider an Astro server component that reads a session cookie to identify a user. What will the component render if the cookie is not present in the request?
Astro
export async function get({ request }) {
  const cookie = request.headers.get('cookie');
  const session = cookie?.includes('sessionId=') ? 'User logged in' : 'Guest user';
  return new Response(session);
}
AThe component throws a runtime error due to missing cookie header.
BThe component renders 'User logged in' because it assumes a session exists.
CThe component renders 'Guest user' because the session cookie is missing.
DThe component renders nothing because the response is empty.
Attempts:
2 left
💡 Hint
Think about how the code checks for the session cookie before deciding the user state.
📝 Syntax
intermediate
2:00remaining
Identify the syntax error in setting a cookie in Astro
Which option correctly sets a cookie named 'sessionId' with value 'abc123' in an Astro server response?
Astro
export async function get() {
  return new Response('OK', {
    headers: {
      'Set-Cookie': 'sessionId=abc123; HttpOnly; Path=/'
    }
  });
}
Areturn new Response('OK', { headers: { 'Set-Cookie': 'sessionId=abc123; HttpOnly; Path=/' } });
Breturn new Response('OK', { headers: { Set-Cookie: 'sessionId=abc123; HttpOnly; Path=/' } });
Creturn new Response('OK', { headers: { 'Set-Cookie': sessionId='abc123'; HttpOnly; Path=/ } });
Dreturn new Response('OK', { headers: { 'Set-Cookie': 'sessionId=abc123 HttpOnly Path=/' } });
Attempts:
2 left
💡 Hint
Headers keys must be strings and cookie attributes separated by semicolons.
❓ state_output
advanced
2:00remaining
What is the session state after cookie expiration in Astro?
If an Astro app sets a cookie with 'Max-Age=0', what will be the session state on the next request?
Astro
export async function get({ request }) {
  const cookie = request.headers.get('cookie');
  const sessionActive = cookie?.includes('sessionId=') ? true : false;
  return new Response(sessionActive ? 'Active session' : 'Session expired');
}
AThe session state is 'Session expired' because the server ignores cookies with Max-Age.
BThe session state is 'Session expired' because 'Max-Age=0' deletes the cookie immediately.
CThe session state is 'Active session' because 'Max-Age=0' means infinite duration.
DThe session state is 'Active session' because the cookie still exists.
Attempts:
2 left
💡 Hint
Remember what 'Max-Age=0' means for cookies in browsers.
🔧 Debug
advanced
2:00remaining
Why does this Astro session cookie not persist?
Given this code snippet, why does the session cookie not persist across requests? export async function get() { return new Response('OK', { headers: { 'Set-Cookie': 'sessionId=abc123; Path=/; Secure' } }); }
Astro
export async function get() {
  return new Response('OK', {
    headers: {
      'Set-Cookie': 'sessionId=abc123; Path=/; Secure'
    }
  });
}
AThe cookie path '/' is invalid and prevents persistence.
BThe cookie value 'abc123' is too short and rejected.
CThe cookie is missing 'HttpOnly' so it is blocked by the browser.
DThe cookie is not sent over HTTP because 'Secure' requires HTTPS connection.
Attempts:
2 left
💡 Hint
Check the meaning of the 'Secure' attribute in cookies.
🧠 Conceptual
expert
3:00remaining
How does cookie-based session management handle concurrent requests in Astro?
In Astro, when multiple concurrent requests from the same client arrive, how does cookie-based session management ensure session consistency?
AEach request reads the cookie independently; session consistency depends on server-side storage synchronization.
BAstro locks the session cookie to one request at a time to prevent conflicts.
CCookies are updated atomically by the browser to ensure no race conditions occur.
DAstro merges concurrent cookie changes automatically before processing requests.
Attempts:
2 left
💡 Hint
Think about where session state is stored and how cookies behave in browsers.

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

  1. Step 1: Understand what cookies do

    Cookies store small data on the user's browser to keep track of information like sessions.
  2. Step 2: Identify the role in session management

    Cookies help remember who the user is between page visits by storing session IDs or tokens.
  3. Final Answer:

    To store small pieces of data in the browser to remember user sessions -> Option B
  4. 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

  1. Step 1: Check function usage

    Astro's setCookie takes the cookie name as a string and the value as a string.
  2. Step 2: Validate syntax correctness

    setCookie('sessionId', 'abc123') correctly passes both arguments as strings, matching the expected syntax.
  3. Final Answer:

    setCookie('sessionId', 'abc123') -> Option A
  4. Quick Check:

    Correct string arguments = setCookie('sessionId', 'abc123') [OK]
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

  1. Step 1: Check cookie presence

    The code gets cookies from request and checks if cookies.user exists. With user=Alice, it passes the check.
  2. 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.
  3. Final Answer:

    Error: setCookie requires response object -> Option A
  4. 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

  1. 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.
  2. 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.
  3. Final Answer:

    setCookie must be called with the response object to attach cookie -> Option D
  4. 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 })
C. setCookie('sessionId', 'abc123', { maxAge: 3600, secure: true, httpOnly: true })
D. setCookie('sessionId', 'abc123', { maxAge: 3600, secure: false, path: '/' })

Solution

  1. Step 1: Check expiration setting

    To expire in 1 hour, use maxAge: 3600 (seconds). One option uses it correctly with secure: true; another uses incorrect expires value.
  2. Step 2: Verify secure and httpOnly flags

    Secure must be true to send only over HTTPS. HttpOnly helps protect cookie from scripts.
  3. 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.
  4. Final Answer:

    setCookie('sessionId', 'abc123', { maxAge: 3600, secure: true, httpOnly: true }) -> Option C
  5. Quick Check:

    Expire 1hr + secure + httpOnly = setCookie('sessionId', 'abc123', { maxAge: 3600, secure: true, httpOnly: true }) [OK]
Hint: Use maxAge in seconds, secure and httpOnly true [OK]
Common Mistakes:
  • Using expires with wrong Date format
  • Setting secure to false for HTTPS-only cookie
  • Forgetting httpOnly for security
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard