+(defun compute-session (req ent)
+ (when (is-session-enabled ent)
+ (let ((key (cookie-session-key ent (request-cookies req)))
+ (has-cookie-key nil)
+ (has-url-key nil))
+ (if key
+ (setq has-cookie-key t)
+ (when (setq key (url-session-key (request-raw-uri req)))
+ (setq has-url-key t)))
+ (let* ((found-session (when key (find-websession key ent)))
+ (session (aif found-session it (make-websession req ent))))
+ (setf (websession-from-req req) session)
+ (when found-session
+ (if has-cookie-key
+ (setf (websession-method session) :cookies)
+ (when has-url-key
+ (setf (websession-method session) :url))))
+ session))))
+