ESC
Type to search...
S
Soli Docs

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

Cookies

Cookies from the Cookie header are automatically parsed and exposed as the global cookies hash. Defaults to {} when no cookies are present. Available in controllers, middleware, and views.

cookies

Global hash of parsed cookies from the Cookie header.

# Read a cookie
theme = cookies["theme"] or "light"
session_id = cookies.session_id

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")