https://github.com/boechat107/ring-ttl-session.git
git clone 'https://github.com/boechat107/ring-ttl-session.git'
(ql:quickload :boechat107.ring-ttl-session)
A session storage that stores session data in-memory with a time-to-live (TTL). It's very similar to ring.middleware.session.memory, but it may use expiring-map (default) or core.cache instead of a Clojure's native map.
The difference from the Ring's native in-memory session store is minimal.
(require '[ring.middleware.session :refer [wrap-session]]
'[ring-ttl-session.core :refer [ttl-memory-store]])
(def app
;; Using the default implementation, expiring-map.
(wrap-session handler {:store (ttl-memory-store (* 60 30))}))
;; Using core.cache
;; (ttl-memory-store (* 60 30) :core-cache)
The argument of ttl-memory-store
is the expiration time given in seconds
(the example's session expires in 30 minutes). At least for now, it's
recommended to use the default implementation (expiring-map) because of it's
low performance overhead when compared with the bare in-memory session store
(check the ring-ttl-session.performance
namespace
or this issue
for details).
Another interesting feature of expiring-map
, the default implementation, is
the support for listeners.
(ttl-memory-store (* 60 30) {:listeners [(fn [k v] (println k v))]})
Other supported features and options can be checked in the project's page.
Copyright © 2015 Andre Boechat
Distributed under the Eclipse Public License, the same as Clojure.