diff --git a/lack-session-store-dbi.asd b/lack-session-store-dbi.asd index b7ac99e..3e44351 100644 --- a/lack-session-store-dbi.asd +++ b/lack-session-store-dbi.asd @@ -10,6 +10,7 @@ :depends-on (:lack-middleware-session :dbi :marshal + :trivial-utf-8 :cl-base64) :components ((:file "src/middleware/session/store/dbi")) :in-order-to ((test-op (test-op t-lack-session-store-dbi)))) diff --git a/src/middleware/session/store/dbi.lisp b/src/middleware/session/store/dbi.lisp index 7b1b945..3fa6cf9 100644 --- a/src/middleware/session/store/dbi.lisp +++ b/src/middleware/session/store/dbi.lisp @@ -7,8 +7,11 @@ :marshal :unmarshal) (:import-from :cl-base64 - :base64-string-to-string - :string-to-base64-string) + :base64-string-to-usb8-array + :usb8-array-to-base64-string) + (:import-from :trivial-utf-8 + :string-to-utf-8-bytes + :utf-8-bytes-to-string) (:export :dbi-store :make-dbi-store :fetch-session @@ -19,9 +22,11 @@ (defstruct (dbi-store (:include store)) (connector nil :type function) (serializer (lambda (data) - (string-to-base64-string (prin1-to-string (marshal data))))) + (usb8-array-to-base64-string + (string-to-utf-8-bytes (prin1-to-string (marshal data)))))) (deserializer (lambda (data) - (unmarshal (read-from-string (base64-string-to-string data))))) + (unmarshal (read-from-string + (utf-8-bytes-to-string (base64-string-to-usb8-array data)))))) (table-name "sessions")) (defmethod fetch-session ((store dbi-store) sid)