Я использую шаблон Reagent, который мне нравится, но я изо всех сил пытаюсь сохранить данные сеанса с одной страницы на другую.
Вот моя проблема, приведенная к самодостаточному примеру. Начните с выполнения "lein new ragent rgtest". Разверните файл handler.clj и вставьте пару маршрутов:
(reitit-ring/router
[
;INSERTION START
["/seshtest"
{:get {
:handler (fn [{session :session}]
{:status 200 :headers {"Content-Type" "text/html"}
:session (assoc session :seshvar (inc (:seshvar session 400)))
:body (html5 (head)[:body [:span (str (:seshvar session "~"))]])})}}]
["/seshtest2"
{:get {
:handler (fn [{session :session}]
{:status 200 :headers {"Content-Type" "text/html"}
:session (assoc session :seshvar (inc (:seshvar session 400)))
:body (html5 (head)[:body [:span (str (:seshvar session "~"))]])})}}]
;INSERTION END
Теперь, если я сделаю «lein figwheel», я могу перейти к «/ seshtest» под сайтом, многократно обновлять и видеть увеличивающееся значение. Я также могу перейти к «/ seshtest2», обновить и увидеть увеличивающееся значение.
Проблема в том, что это числовое значение не распространяется на две страницы. То есть, если я перехожу к «/ seshtest» и обновляюсь, пока не вижу, скажем, «410», а затем перехожу к «/ seshtest2», я не вижу 411. Я вижу значение по умолчанию ~, и если я обновляю Я вижу 401, 402 и так далее.
Так что мой сеанс уничтожается при изменении URL. Аналогично, cookie-файл «ring-session» изменяется на другое значение, когда я переключаю свой запрос GET на другой URL.
Мне пришло в голову, что это может происходить, потому что шаблон Реагента не предвидит изменения страницы. Существует такая вещь, как одностраничное приложение Reagent; это не то, чего я пытаюсь достичь, и не все приложения React, с которыми я работал, были настоящими SPA, но, возможно, шаблон ожидает SPA.
Если это так, мне нужно знать, есть ли другой шаблон, который я должен использовать. Мне нужен Hiccup на стороне сервера и перезагрузка для файлов CLJ и CLJS, но если мне придется пожертвовать наличием React на стороне клиента, чтобы получить межстраничные сеансы, тогда я могу принять это.
Если есть простой способ выполнить то, что я хочу, используя шаблон «реагент лейн», я бы тоже хотел об этом знать.
Спасибо!