gpt4 book ai didi

Haskell 快照 : Session example

转载 作者:行者123 更新时间:2023-12-04 20:51:45 29 4
gpt4 key购买 nike

我一直在谷歌搜索有关如何使用 Snap session 的示例。到目前为止什么都没有。
有人可以指点我一篇文章或带有基于 cookie 的 session 的简单示例的内容吗?

一个代码片段将非常受欢迎。
类似于将用户名放入 session 中并在每次请求之前检查其存在和有效性。我查看了 Snap.extension.session 但我仍然太菜鸟,无法仅从库代码中弄清楚如何使用它。

我知道 setInSession 是将 session 值放入 cookie 的函数,但我无法从签名中完全弄清楚如何使用它:

setInSession k v = Map.insert k v `liftM` getSession >>= setSession

或者如何将整个东西粘合在一起。

我不知道要求一些示例代码是否违反规则,但如果我能在网上找到任何东西,我就不会这样做。

先感谢您。

--- 更新 ---

我按照下面的示例和链接进行操作,但事情仍然不正确。

我只想要一个简单的测试,它读取一个键和一个值并将其放入 session cookie,然后我想读回 session 值并显示。

所以我初始化了我的 session 并将其置于主应用程序状态。
s <- nestSnaplet "" sess $ initCookieSessionManager "config/site_key.txt" "sess" (Just 3600)

第一个混淆是 session 初始化功能需要的关键。
在初始项目设置期间不会创建 key 。

那么我该如何创建呢?
项目文件结构中的 key 应该放在哪里以便函数可以找到它?

然后处理程序:
putCookie :: Handler App App ()
putCookie = do
par <- getPostParams
let k = T.decodeUtf8 $ head (par ! (B.pack "key"))
let v = T.decodeUtf8 $ head (par ! (B.pack "value"))
with sess $ setInSession k v
heistLocal (bindString "message" "Cookie inserted!") $ render "reply"

这只是从 web 表单中读取键和值,并且应该将键值对放入 cookie 中。好吧,显然它没有。
shCookie :: Handler App App ()
shCookie = do
v <- with sess $ getFromSession "key"
heistLocal (bindString "message" (fromMaybe "" v)) $ render "reply"

这个只是读回来并显示。我总是得到一个空字符串,这意味着没有这样的事情。

以上任何内容看起来都不正确吗?我在哪里犯错?
一切编译正确,但 session cookie 不存在。

最佳答案

Snap.extension.session 是否意味着 this 模块? AFAIK snap-auth 包已被弃用。

您可以使用实现为 session api 的新 snaplet

查看 example 如何设置您的应用程序以使用 session 和身份验证 snaplets。然后您将能够在 session 中存储数据:

data App = App
{ _heist :: Snaplet (Heist App)
, _sess :: Snaplet SessionManager
, _auth :: Snaplet (AuthManager App)
}
makeLens ''App

myHandler :: Handler App App ()
myHandler = do
with sess $ setInSession "key" "value"

添加:

带有站点 key 的文件将自动创建。函数 initCookieSessionManager (定义 here )使用 getKey 包中的 clientsession 函数(参见 here )。来自文档: If the file does not exist or is corrupted a random key will be generated and stored in that file.
我认为您的处理程序不起作用,因为您没有提交 session (请参阅 commitSession here )您可以在每个更新 session 的处理程序中提交它,或者使用 wrapHandlers 和/或 withSession 自动执行它。

关于Haskell 快照 : Session example,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9989059/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com