小编jgr*_*gre的帖子

Compojure/Ring:为什么带有cookie存储的会话在服务器重启后仍然存在?

我有一个compojure应用程序,它使用环会话包装器来存储与当前用户关联的OAuth令牌.我希望这个令牌在服务器重新启动时保持可用,这样我就不必每次都要经过身份验证过程.

我假设使用cookie-store而不是默认的内存存储会有所帮助,但事实并非如此.我错过了什么?

这是代码的相关部分:

(defn auth-callback-handler
  [session {code :code}]
  (let [token (retrieve-token code)]
    (-> (redirect "/") (assoc :session (assoc session :token token)))))

(defroutes app-routes
  (GET "/" {session :session} (root-handler session))
  (GET "/auth-callback" {session :session params :params} (auth-callback-handler session params))
  (route/not-found "Not Found"))

(def app
  (-> (handler/site app-routes)
      (wrap-session {:store (cookie-store {:key "a 16-byte secret"})})))
Run Code Online (Sandbox Code Playgroud)

该函数root-handler使用令牌来决定是否有人登录,但不会以会话信息的方式返回任何内容.

cookies session clojure compojure ring

10
推荐指数
1
解决办法
2741
查看次数

HXT:在纯代码中读取和写入HTML时出现令人惊讶的行为

我想从String读取HTML,处理它并使用HXT将更改的文档作为String返回.由于此操作不需要IO,我宁愿执行箭头而runLA不是使用runX.

代码看起来像这样(省略处理以简化):

runLA (hread >>> writeDocumentToString [withOutputHTML, withIndent yes]) html
Run Code Online (Sandbox Code Playgroud)

但是,html结果中缺少周围的标记:

["\n  <head>\n    <title>Bogus</title>\n  </head>\n  <body>\n        Some trivial bogus text.\n    </body>\n",""]
Run Code Online (Sandbox Code Playgroud)

当我使用runX时,就像这样:

runX (readString [] html >>> writeDocumentToString [withOutputHTML, withIndent yes])
Run Code Online (Sandbox Code Playgroud)

我得到了预期的结果:

["<html>\n  <head>\n    <title>Bogus</title>\n  </head>\n  <body>\n        Some trivial bogus text.\n    </body>\n</html>\n"]
Run Code Online (Sandbox Code Playgroud)

为什么会这样,我该如何解决?

haskell hxt

5
推荐指数
1
解决办法
366
查看次数

非线性减速在Clojure中创建了一个懒惰的seq

我实现了一个函数,它将给定输入集合的n-gram作为惰性seq返回.

(defn gen-ngrams
  [n coll]
  (if (>= (count coll) n)
    (lazy-seq (cons (take n coll) (gen-ngrams n (rest coll))))))
Run Code Online (Sandbox Code Playgroud)

当我用更大的输入集合调用此函数时,我希望看到执行时间的线性增加.但是,我观察到的时间比这更糟:

user> (time (count (gen-ngrams 3 (take 1000 corpus))))
"Elapsed time: 59.426 msecs"
998
user> (time (count (gen-ngrams 3 (take 10000 corpus))))
"Elapsed time: 5863.971 msecs"
9998
user> (time (count (gen-ngrams 3 (take 20000 corpus))))
"Elapsed time: 23584.226 msecs"
19998
user> (time (count (gen-ngrams 3 (take 30000 corpus))))
"Elapsed time: 54905.999 msecs"
29998
user> (time (count (gen-ngrams 3 (take 40000 corpus)))) …
Run Code Online (Sandbox Code Playgroud)

clojure lazy-sequences

3
推荐指数
1
解决办法
242
查看次数

标签 统计

clojure ×2

compojure ×1

cookies ×1

haskell ×1

hxt ×1

lazy-sequences ×1

ring ×1

session ×1