Full Stack Development

Cookies



by Tomas Trescak t.trescak@westernsydney.edu.au

Web

/

Cookies

🤬 Cookies are just rubbish to track personal information

    Web

    /

    What Are Cookies?

    • Small text files on your device
        visitor_id=guest456
      

    Cookies

    Server Side

        import { cookies } from 'next/headers';
    import { NextResponse } from 'next/server';
    
    export async function Page(): Promise<NextResponse> {
      const cookieStore = await cookies()
    
      // read
      const id = cookieStore.get('visitor_id');
    
      // write
      cookieStore.set('visitor_id', 'guest456', {
        path: '/',
        maxAge: 60 * 60, // 1 hour
      });
      return <>
        Hello {id}
      </>;
    }
      

    Cookies

    Client Side

        // app/components/SetPrefs.tsx
    'use client';
    import { useEffect } from 'react';
    
    export default function SetPrefs(): JSX.Element {
      useEffect(() => {
        document.cookie = 'prefs=tag:tech; path=/; max-age=86400'; // 1 day
      }, []);
      return <p>Preferences set to tech posts!</p>;
    }
      

    Cookies

    Security

        // app/api/login/route.ts
    import { cookies } from 'next/headers';
    import { NextResponse } from 'next/server';
    
    export async function POST(): Promise<NextResponse> {
      const sessionId = 'abc789xyz'; // From auth logic
      cookies().set('session_id', sessionId, {
        path: '/',
        maxAge: 60 * 60, // 1 hour
        httpOnly: true, // Blocks JS access
        secure: process.env.NODE_ENV === 'production', // HTTPS in prod
        sameSite: 'strict', // Anti-CSRF
      });
      return NextResponse.json({ message: 'Logged in!' }, { status: 200 });
    }