visitor_id=guest456
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}
</>;
}
// 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>;
}
// 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 });
}