莱宁根“试剂”模板下的会话

时间:2019-01-06 04:10:49

标签: clojure leiningen ring reagent

我正在使用我喜欢的Reagent模板,但是我正在努力使会话数据从一个页面持久到另一个页面。

这是我的问题,只不过是一个独立的例子。首先执行“ lein新试剂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更改时,我的会话被破坏了。相关地,当我将GET请求切换到另一个URL时,“ ring-session” cookie会更改为另一个值。

在我看来,这可能是由于试剂模板无法预期页面更改而发生的。有诸如Reagent单页应用程序之类的东西。这不是我要完成的工作,并不是我使用过的所有React应用程序都是真正的SPA,但也许模板期望有SPA。

如果是这样,我需要知道是否应该使用另一个模板。我需要在服务器端打ic,并重新加载CLJ和CLJS文件,但是如果我不得不牺牲让客户端React来获得跨页面会话,那么我可以接受。

如果使用“莱因试剂”模板时有一种简单的方法来完成我想要的事情,我也想知道这一点。

谢谢!

0 个答案:

没有答案