Tips & Tricks

Cara Mengimplementasikan Manajemen Cookie dan Session dengan Claude Code

Pelajari cara mengimplementasikan manajemen cookie dan session menggunakan Claude Code. Dilengkapi contoh kode praktis dan panduan langkah demi langkah.

Cookie adalah fondasi autentikasi pengguna dan manajemen session, namun kesalahan konfigurasi keamanan bisa menyebabkan kerentanan serius. Dengan Claude Code, kamu bisa mengimplementasikan mekanisme manajemen Cookie yang aman dengan benar.

> Buatkan utilitas operasi Cookie yang menyertakan pengaturan keamanan.
> Wajibkan pengaturan HttpOnly, Secure, dan SameSite.
interface CookieOptions {
  maxAge?: number;
  path?: string;
  domain?: string;
  secure?: boolean;
  httpOnly?: boolean;
  sameSite?: 'strict' | 'lax' | 'none';
}

const DEFAULT_OPTIONS: CookieOptions = {
  path: '/',
  secure: true,
  httpOnly: true,
  sameSite: 'lax',
  maxAge: 86400, // 1 hari
};

class CookieManager {
  static set(name: string, value: string, options: CookieOptions = {}) {
    const opts = { ...DEFAULT_OPTIONS, ...options };
    const parts = [`${encodeURIComponent(name)}=${encodeURIComponent(value)}`];

    if (opts.maxAge) parts.push(`Max-Age=${opts.maxAge}`);
    if (opts.path) parts.push(`Path=${opts.path}`);
    if (opts.domain) parts.push(`Domain=${opts.domain}`);
    if (opts.secure) parts.push('Secure');
    if (opts.httpOnly) parts.push('HttpOnly');
    if (opts.sameSite) parts.push(`SameSite=${opts.sameSite}`);

    return parts.join('; ');
  }

  static parse(cookieHeader: string): Record<string, string> {
    return cookieHeader.split(';').reduce((acc, pair) => {
      const [key, ...vals] = pair.trim().split('=');
      if (key) acc[decodeURIComponent(key)] = decodeURIComponent(vals.join('='));
      return acc;
    }, {} as Record<string, string>);
  }

  static delete(name: string, path = '/') {
    return this.set(name, '', { maxAge: 0, path });
  }
}

Manajemen Session di Express

> Implementasikan manajemen session yang aman di Express.
> Gunakan Redis sebagai session store dan tambahkan perlindungan CSRF.
import session from 'express-session';
import RedisStore from 'connect-redis';
import { createClient } from 'redis';
import csrf from 'csurf';

const redisClient = createClient({ url: process.env.REDIS_URL });
redisClient.connect();

const sessionConfig: session.SessionOptions = {
  store: new RedisStore({ client: redisClient }),
  secret: process.env.SESSION_SECRET!,
  name: '__session',
  resave: false,
  saveUninitialized: false,
  cookie: {
    secure: process.env.NODE_ENV === 'production',
    httpOnly: true,
    sameSite: 'lax',
    maxAge: 24 * 60 * 60 * 1000, // 24 jam
  },
};

app.use(session(sessionConfig));
app.use(csrf({ cookie: false })); // CSRF berbasis session

Manajemen Cookie yang dioperasikan di sisi browser (yang bukan HttpOnly) juga bisa di-generate dengan Claude Code.

// Utilitas Cookie sisi client (untuk info non-sensitif seperti tema dan pengaturan bahasa)
export const clientCookie = {
  get(name: string): string | null {
    const match = document.cookie.match(new RegExp(`(?:^|; )${name}=([^;]*)`));
    return match ? decodeURIComponent(match[1]) : null;
  },

  set(name: string, value: string, days = 365) {
    const expires = new Date(Date.now() + days * 864e5).toUTCString();
    document.cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)};expires=${expires};path=/;SameSite=Lax`;
  },

  remove(name: string) {
    document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/`;
  },
};

// Contoh penggunaan: menyimpan pengaturan tema
clientCookie.set('theme', 'dark');
const theme = clientCookie.get('theme'); // 'dark'

Penguatan Keamanan Session

// Pencegahan serangan session fixation
app.post('/login', async (req, res) => {
  const user = await authenticate(req.body);

  // Regenerasi session ID saat login berhasil
  req.session.regenerate((err) => {
    if (err) return res.status(500).json({ error: 'Session error' });
    req.session.userId = user.id;
    res.json({ success: true });
  });
});

Summary

Dengan Claude Code, kamu bisa mengimplementasikan secara konsisten mulai dari pengaturan Cookie yang aman, manajemen session, hingga perlindungan CSRF. Untuk autentikasi secara umum, lihat Panduan Implementasi Autentikasi, dan untuk perbandingan dengan autentikasi JWT, lihat Artikel JWT Authentication. Security Audit juga bisa dijadikan referensi.

Untuk best practices manajemen session, lihat OWASP Session Management.

#Claude Code #Cookie #session #security #TypeScript