Did you know ... Search Documentation:
http_redis_plugin.pl -- Hook session management to use Redis
PublicShow source

This module acts as a plugin for library(http/http_session), storing session information on a Redis server. This has several consequences:

  • The Prolog server may be restarted without loosing session data. This is notably useful when long session timeouts are used.
  • Multiple Prolog servers can act as a cluster while session management is used.
  • Associating Prolog data with sessions is relatively slow. The assert/retract is replaced by managing a Redis list. Data in this list is matched sequentially, where each term needs to be parsed before it can be matched.
  • Associated data is currently limited to ground terms.

The library is activated by loading it in addition to library(http/http_session) and using http_set_session_options/1 to configure the Redis database as below. The redis_server/2 predicate from library(redis) can be used to specify the parameters for the redis server such as host, port or authentication.

:- http_set_session_options(
       [ redis_db(default),
         redis_prefix('swipl:http:session')
       ]).

Redis key usage

All Redis keys reside under a prefix specified by the option redis_prefix(Prefix), which defaults to 'swipl:http:session'. Here we find:

  • An ordered set at <prefix>:expire that contains the session ids, ordered by the time the session expires. Session enumeration and garbage collection is based on this set.
  • A hash at <prefix>:session:<id> which contains the peer address, the last used time and optionally session specific settings.
  • If there is session data, a list at <prefix>:data:<id> of Prolog terms, represented as strings that contain the session data.