Session Functions
Server-side session management with pluggable storage backends.
Storage Backends
Soli supports multiple session storage backends. Configure via code, environment variables, or config files.
| Driver | Description | Configuration |
|---|---|---|
in_memory |
Default. Fast but lost on restart | None |
disk |
File-based JSON storage | path: directory (default: ./sessions) |
solidb |
SolidB HTTP database | solidb_host, solidb_database, solidb_collection |
solikv |
SoliKV/Redis with TTL | solikv_host, solikv_port, solikv_token |
Configuration
session_configure(options)
Configure session storage at runtime. Supports driver, path, solidb_*, and solikv_* options.
Examples
session_configure({"driver": "disk", "path": "./sessions"})
session_configure({"driver": "solidb", "solidb_host": "localhost:8080", "solidb_database": "myapp"})
session_configure({"driver": "solikv", "solikv_host": "localhost", "solikv_port": 6380})
session_driver()
Get the current session storage driver name.
Returns
String - One of: "in_memory", "disk", "solidb", "solikv"
current = session_driver()
print("Using: " + current)
session_config()
Get the current session configuration as a Hash.
Returns
Hash - Configuration with driver, path, host, port, ttl, etc.
config = session_config()
print(config["driver"])
print(config["ttl"])
Environment Variables
Session configuration can also be set via environment variables:
| Variable | Description | Default |
|---|---|---|
SOLI_SESSION_DRIVER |
Storage backend | in_memory |
SOLI_SESSION_PATH |
Path for disk storage | ./sessions |
SOLI_SOLIDB_HOST |
SolidB server address | localhost:8080 |
SOLI_SOLIDB_DATABASE |
SolidB database name | solidb |
SOLI_SOLIKV_HOST |
SoliKV server address | localhost |
SOLI_SOLIKV_PORT |
SoliKV port | 6380 |
SOLI_SESSION_TTL |
Session timeout (seconds) | 86400 |
Common Patterns
Authentication Flow
# Login
def login(email: String, password: String) -> Bool
user = User.find_by_email(email)
if !user || !argon2_verify(password, user["password_hash"])
return false
end
session_set("user_id", user["id"])
session_regenerate # Prevent session fixation
true
end
# Check authentication
def current_user -> Hash?
user_id = session_get("user_id")
if !user_id
return null
end
User.find(user_id)
end
# Logout
def logout
session_destroy
end
Flash Messages
# Set a flash message
def flash(type: String, message: String)
flashes = session_get("_flashes") ?? []
push(flashes, { "type": type, "message": message })
session_set("_flashes", flashes)
end
# Get and clear flash messages
def get_flashes -> Array
flashes = session_get("_flashes") ?? []
session_delete("_flashes")
flashes
end
# Usage
flash("success", "Account created!")
flash("error", "Invalid email address")