[not loaded]http_redis_plugin.pl -- Hook session management to use Redis
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.