Sessions

Protection des sessions

Protection manuelle — `session_active`

Pour protéger une session anonyme à valeur (panier, formulaire multi-étapes, wizard), utilisez protect_session :

use runique::middleware::auth::protect_session;

// Protège la session pendant 30 minutes
protect_session(&session, 60 * 30).await?;

La clé session_active stocke un timestamp Unix futur. La protection expire automatiquement à cette date — aucune clé à nettoyer manuellement.

Pour retirer la protection explicitement :

use runique::middleware::auth::unprotect_session;

unprotect_session(&session).await?;

Logique de protection

is_protected(record) = true si :
  - record contient "user_id"
  - OU record contient "session_active" avec un timestamp futur

Cas d'usage — protection d'un panier

pub async fn add_to_cart(request: Request, item: Item) -> AppResult<Response> {
    // Ajouter l'article au panier
    request.session.insert("cart", &cart).await?;

    // Protéger la session 2h contre le cleanup d'urgence
    protect_session(&request.session, 60 * 60 * 2).await?;

    Ok(redirect("/cart"))
}

pub async fn checkout_complete(request: Request) -> AppResult<Response> {
    // Vider le panier et retirer la protection
    request.session.remove::<Cart>("cart").await?;
    unprotect_session(&request.session).await?;

    Ok(redirect("/confirmation"))
}