On this page:
current-session-manager
current-session-id
session-manager?
make-session-manager-factory
session-ref
session-manager-ref
session-set!
session-manager-set!
session-update!
session-manager-update!
session-remove!
session-manager-remove!
wrap-session
27.1 Session Stores
session-store?
memory-session-store?
make-memory-session-store
27.1.1 Postgre  SQL Session Store
postgres-session-store?
make-postgres-session-store

27 SessionsπŸ”—β„Ή

 (require koyo/session) package: koyo-lib

This module exposes a component for storing and retrieving data from a browser session.

parameter

(current-session-manager) β†’ (or/c #f session-manager?)

(current-session-manager sessions) β†’ void?
  sessions : (or/c #f session-manager?)
This parameter holds a reference to the current session manager.

Functions session-ref, session-set!, session-update! and session-remove! use this parameter under the hood to locate the manager.

The parameter is installed by wrap-session.

parameter

(current-session-id) β†’ (or/c #f non-empty-string?)

(current-session-id session-id) β†’ void?
  session-id : (or/c #f non-empty-string?)
This parameter holds the session id for the current request. If the current request handler is wrapped with wrap-session, then this is guaranteed not to be #f.

procedure

(session-manager? v) β†’ boolean?

  v : any/c
Returns #t when v is a session manager.

procedure

(make-session-manager-factory 
  #:cookie-name cookie-name 
  [#:cookie-path cookie-path 
  #:cookie-secure? cookie-secure? 
  #:cookie-http-only? cookie-http-only? 
  #:cookie-same-site cookie-same-site] 
  #:shelf-life shelf-life 
  #:secret-key secret-key 
  #:store store) 
 β†’ (-> session-manager?)
  cookie-name : non-empty-string?
  cookie-path : path-string? = "/"
  cookie-secure? : boolean? = #t
  cookie-http-only? : boolean? = #t
  cookie-same-site : (or/c 'lax 'strict) = 'strict
  shelf-life : exact-positive-integer?
  secret-key : bytes?
  store : session-store?
Returns a function that will create a session manager in accordance with the given options.

procedure

(session-ref k) β†’ any/c

  k : symbol?
(session-ref k d) β†’ any/c
  k : symbol?
  d : any/c

procedure

(session-manager-ref sm k) β†’ any/c

  sm : session-manager?
  k : symbol?
(session-manager-ref sm k d) β†’ any/c
  sm : session-manager?
  k : symbol?
  d : any/c
Looks up k in the current session, returning d if the key is not found. If d is not provided, then a user error is raised.

procedure

(session-set! k v) β†’ void?

  k : symbol?
  v : serializable?

procedure

(session-manager-set! sm k v) β†’ void?

  sm : session-manager?
  k : symbol?
  v : serializable?
Stores v under the k key in the current session.

procedure

(session-update! k p) β†’ serializable?

  k : symbol?
  p : (-> any/c serializable?)
(session-update! k p d) β†’ serializable?
  k : symbol?
  p : (-> any/c serializable?)
  d : any/c

procedure

(session-manager-update! sm k p) β†’ serializable?

  sm : session-manager?
  k : symbol?
  p : (-> any/c serializable?)
(session-manager-update! sm k p d) β†’ serializable?
  sm : session-manager?
  k : symbol?
  p : (-> any/c serializable?)
  d : any/c
Updates k in the current session by applying p to it. If k is not set then d is used as the default value. If d is not provided, then a user error is raised.

procedure

(session-remove! k) β†’ void?

  k : symbol?

procedure

(session-manager-remove! sm k) β†’ void?

  sm : session-manager?
  k : symbol?
Removes k from the current session. Does nothing if k is not set in the current session.

procedure

((wrap-session sm) handler) β†’ (-> request? any/c ... response?)

  sm : session-manager?
  handler : procedure?
Wraps a handler such that the appropriate session information for the current visitor is loaded and, eventually, stored.

If the current visitor doesn’t have a session cookie then a new one is generated and added to the response.

Each session’s lifetime is extended with every page load.

27.1 Session StoresπŸ”—β„Ή

Session stores decide how session data is stored.

procedure

(session-store? v) β†’ boolean?

  v : any/c
Returns #t when v is a session store.

procedure

(memory-session-store? v) β†’ boolean?

  v : any/c

procedure

(make-memory-session-store [#:ttl ttl    
  #:file-path path]) β†’ session-store?
  ttl : exact-positive-integer? = (* 7 86400)
  path : path-string? = (make-temporary-file)
A session store that keeps all session data in memory, persisting and loading it to/from disk on shutdown and startup.

The #:ttl argument controls how many seconds to wait before removing stale sessions.

27.1.1 PostgreSQL Session StoreπŸ”—β„Ή

 (require koyo/session/postgres) package: koyo-lib

This module provides a session store backed by PostgreSQL tables.

procedure

(postgres-session-store? v) β†’ boolean?

  v : any/c

procedure

(make-postgres-session-store database 
  #:ttl exact-positive-integer?) 
 β†’ session-store?
  database : database?
  exact-positive-integer? : (* 7 86400)
A session store that persists session data the given PostgreSQL database.

The #:ttl argument determines how long sessions are kept around for.

Added in version 0.25 of package koyo-lib.