Session Functions
Server-side session management for user state.
Basic Operations
session_get(key)
Get a value from the session.
Parameters
key : String - The session key
Returns
Any? - The stored value or null if not found
let user_id = session_get("user_id")
let cart = session_get("shopping_cart") ?? []
session_set(key, value)
Store a value in the session.
Parameters
key : String - The session keyvalue : Any - The value to store (must be JSON-serializable)session_set("user_id", 123)
session_set("preferences", { "theme": "dark", "lang": "en" })
session_delete(key)
Remove a value from the session.
session_delete("user_id")
session_delete("temporary_data")
session_has(key)
Check if a key exists in the session.
Returns
Bool - true if the key exists
if session_has("user_id") {
# User is logged in
}
Session Management
session_destroy()
Destroy the entire session. Removes all data and invalidates the session ID.
# Logout
session_destroy()
session_regenerate()
Generate a new session ID while preserving data. Important: Call this after login to prevent session fixation attacks.
# After successful login
session_set("user_id", user["id"])
session_regenerate() # Security: generate new session ID
Common Patterns
Authentication Flow
# Login
def login(email: String, password: String) -> Bool
let user = User.find_by_email(email)
if !user || !argon2_verify(password, user["password_hash"]) {
return false
}
session_set("user_id", user["id"])
session_regenerate() # Prevent session fixation
true
end
# Check authentication
def current_user -> Hash?
let user_id = session_get("user_id")
if !user_id {
return null
}
User.find(user_id)
end
# Logout
def logout
session_destroy()
end
Flash Messages
# Set a flash message
def flash(type: String, message: String)
let flashes = session_get("_flashes") ?? []
push(flashes, { "type": type, "message": message })
session_set("_flashes", flashes)
end
# Get and clear flash messages
def get_flashes -> Array
let flashes = session_get("_flashes") ?? []
session_delete("_flashes")
flashes
end
# Usage
flash("success", "Account created!")
flash("error", "Invalid email address")