(lambda (k v)
(declare (ignore k))
(when (equal key (websession-key v))
- (setf (websession-lastref v) (get-universal-time))
- (return-from find-websession v)))
+ (setf (websession-lastref v) (get-universal-time))
+ (return-from find-websession v)))
sessions)
nil))
(defun is-session-enabled (ent)
(not (null (sessions (session-master (entity-project ent))))))
-
+
(defun make-websession (req ent)
(let* ((key (random-string :length +length-session-id+
- :set :lower-alphanumeric))
- (sess (make-instance 'websession
- :key key
- :lastref (get-universal-time)
- :lifetime (lifetime (session-master (entity-project ent)))
- :method :try-cookie))
- (hash (sessions (session-master (entity-project ent)))))
+ :set :lower-alphanumeric))
+ (sess (make-instance 'websession
+ :key key
+ :lastref (get-universal-time)
+ :lifetime (lifetime (session-master (entity-project ent)))
+ :method :try-cookie))
+ (hash (sessions (session-master (entity-project ent)))))
(when hash
(setf (gethash key hash) sess)
(setf (websession-from-req req) sess)
(defun compute-session (req ent url-session-id)
(when (is-session-enabled ent)
(let* ((cookie-session-id (cookie-session-key ent (request-cookies req)))
- (session-id (or url-session-id cookie-session-id))
- (found-session (when session-id
- (find-websession session-id ent)))
- (session (aif found-session
- it
- (make-websession req ent))))
+ (session-id (or url-session-id cookie-session-id))
+ (found-session (when session-id
+ (find-websession session-id ent)))
+ (session (aif found-session
+ it
+ (make-websession req ent))))
(cond
- (cookie-session-id
- (setf (websession-method session) :cookies))
- (url-session-id
- (setf (websession-method session) :url)))
+ (cookie-session-id
+ (setf (websession-method session) :cookies))
+ (url-session-id
+ (setf (websession-method session) :url)))
(setf (websession-from-req req) session))))
-
+
;;; Reap expired sessions
(defun find-expired-sessions ()
(loop for s in (all-sessions)
- when (is-session-expired (car s))
- collect s))
+ when (is-session-expired (car s))
+ collect s))
(defun all-sessions (&aux s)
(maphash
(lambda (name proj)
(declare (ignore name))
(let* ((sm (session-master proj))
- (sessions (when sm (sessions sm))))
+ (sessions (when sm (sessions sm))))
(when sessions
- (maphash
- (lambda (k v)
- (declare (ignore k))
- (push (cons v proj) s))
- sessions))))
+ (maphash
+ (lambda (k v)
+ (declare (ignore k))
+ (push (cons v proj) s))
+ sessions))))
*active-projects*)
s)
(defmethod flush-expired (s)
(let ((sessions (sessions (session-master (cdr s)))))
(remhash (car s) sessions)
- (add-log-entry (cdr s) "flush expired session: key=~A"
- (websession-key (car s)))))
+ (add-log-entry (cdr s) "flush expired session: key=~A"
+ (websession-key (car s)))))
(defun is-session-expired (ws)
(> (get-universal-time) (+ (websession-lastref ws)
- (websession-lifetime ws))))
+ (websession-lifetime ws))))
(defun is-raw-session-id (str)
(and (stringp str)