Nyx con Ejemplos

Sesiones con Serve

std/session provee sesiones basadas en cookies respaldadas por nyx-kv. session_start lee/crea el ID de sesión, session_set/get almacenan datos con TTL, session_destroy expira la cookie.

Código

// nyx-serve sessions — cookie-based sessions backed by nyx-kv
// Sesiones nyx-serve — sesiones con cookies respaldadas por nyx-kv

import "std/http"
import "std/web"
import "std/session"

fn login(req: Request) -> Response {
    var resp: Response = response_json(200, "{\"logged_in\": true}")

    // session_start reads the nyx_session cookie or creates a new ID
    // and sets the Set-Cookie header on the response
    let sid: String = session_start(req, resp)

    // Store data in the session (persisted to nyx-kv with TTL)
    session_set(req, "user_id", "42")
    session_set(req, "role", "admin")

    return resp
}

fn profile(req: Request) -> Response {
    // Read session data from nyx-kv using the session cookie
    let user_id: String = session_get(req, "user_id")

    if user_id.length() == 0 {
        return response_json(401, "{\"error\": \"not logged in\"}")
    }
    return response_json(200, "{\"user_id\": \"" + user_id + "\"}")
}

fn logout(req: Request) -> Response {
    var resp: Response = response_json(200, "{\"logged_out\": true}")
    // session_destroy expires the cookie (individual keys expire via TTL)
    session_destroy(req, resp)
    return resp
}

fn main() -> int {
    // Configure session backend — where nyx-kv is running
    session_configure("127.0.0.1", 6380, 3600)  // 1 hour TTL

    let app: App = app_new()
    app_post(app, "/login", login)
    app_get(app, "/profile", profile)
    app_post(app, "/logout", logout)

    print("session-based auth configured")
    return 0
}

Salida

session-based auth configured

Explicación

Las sesiones son el patrón clásico de la web para rastrear usuarios autenticados a través de requests. std/session almacena un ID de sesión firmado en una cookie (nyx_session) y guarda los datos reales en nyx-kv, de modo que sobreviven a reinicios y escalan horizontalmente. session_start es idempotente: lee la cookie existente o crea un ID nuevo y emite Set-Cookie. session_set y session_get operan sobre el almacén clave-valor detrás de ese ID, cada entrada con su propio TTL. session_destroy expira la cookie del lado del cliente mientras las claves expiran del lado del servidor mediante TTL. Este es el mismo patrón que usa nyxlang.com para su playground — no se necesitan sesiones "pegajosas" (sticky), cualquier worker puede atender cualquier request.

← Anterior Siguiente →

Source: examples/by-example/81-serve-sessions.nx