2015-03-17 4 views
0

Каждый раз, когда я сохраняю исходный файл Clojure в проекте Ring, сеанс сбрасывается.Собрание звонка с каждым сохранением (Compojure)

Примечание: ring-session ids. Я предшествуют каждому, сохранив свой handler.clj файл:

2015-03-17 11:02:51,857 INFO onelog.core: Starting :get/for 127.0.0.1 {"accept-encoding" "gzip, deflate, sdch", "cache-control" "max-age=0", "connection" "keep-alive", "user-agent" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36", "accept-language" "en-US,en;q=0.8", "accept" "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "host" "localhost:3000", "cookie" "ring-session=40575c9e-fbe9-4fd5-8624-d5e4ef9d98a9"} 
2015-03-17 11:02:51,859 INFO onelog.core: Finished :get/for 127.0.0.1 in (2 ms) Status: 404 
2015-03-17 11:03:01,147 INFO onelog.core: Starting :get/for 127.0.0.1 {"accept-encoding" "gzip, deflate, sdch", "cache-control" "max-age=0", "connection" "keep-alive", "user-agent" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36", "accept-language" "en-US,en;q=0.8", "accept" "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "host" "localhost:3000", "cookie" "ring-session=26aadcce-e665-43df-afa5-0f09f98351ac"} 
2015-03-17 11:03:01,149 INFO onelog.core: Finished :get/for 127.0.0.1 in (2 ms) Status: 404 

Он может получить обременительным, если вы работаете с вошедшего в систему пользователя, только для того, чтобы вновь войти в систему каждый раз, когда вы вносите изменения.

Вот что в моем обработчике:

(def app 
    (-> app-routes 
     (friend/authenticate auth-config) 
     (wrap-defaults site-defaults) 
     (logger/wrap-with-logger))) 

Я пропускаю что-то очевидное?

ответ

4

Возможно, вы создали экземпляр нового хранилища сеансов при создании (def) вашего обработчика. Существует несколько способов решения проблемы. Прямым методом является использование defonce для определения одного хранилища сеансов и его повторного использования при создании новых обработчиков. Это вызовет проблемы, если вам потребуется несколько независимых обработчиков (для тестирования и т. Д.). Изучите компоненты для более полного решения.

После обновления OP:

(wrap-defaults req site-defaults) здесь создает новый (в памяти, пустой) сеансовый магазин на каждой оценки, так что все ваши старые сессии будут признаны недействительными, когда (def app ...) называется.

На простое решение использовать что-то вроде

(defonce app 
    (-> #'app-routes ;; reevaluate app-routes at every request 
     (friend/authenticate auth-config) 
     (wrap-defaults site-defaults) 
     (logger/wrap-with-logger))) 

что позволяет загрузить файл, содержащий приложение без сброса сессий, за счет что делает его немного более неудобный добавить промежуточное программное обеспечение.

В число задействованных альтернатив входят использование прочного (диска, базы данных, memcached и т. Д.) Или хранилища сеансов на основе чистой cookie (на стороне клиента), которые не будут очищены при перезагрузке пакетов-по умолчанию. См. Документацию для wrap-defaults и ring.middleware.session

+0

Спасибо за ваш ответ. Я собираюсь опубликовать код обработчика ... – KendallB

+0

Конечно, см. Мое обновленное сообщение –