【发布时间】:2012-04-16 20:36:49
【问题描述】:
我一直在谷歌上搜索有关如何使用 Snap 会话的示例。到目前为止什么都没有。 有人可以指点我一篇文章或带有基于 cookie 会话的简单示例的内容吗?
代码 sn-p 将非常受欢迎。 类似于将用户名放入会话中并在每次请求之前检查其存在和有效性。我查看了 Snap.extension.session,但我仍然太菜鸟,无法仅从库代码中弄清楚如何使用它。
我知道 setInSession 是将会话值放入 cookie 的函数,但我无法从签名中完全弄清楚如何使用它:
setInSession k v = Map.insert k v `liftM` getSession >>= setSession
或者如何将整个东西粘合在一起。
我不知道要求一些示例代码是否违反规则,但如果我能在网上找到任何东西,我就不会这样做。
提前谢谢你。
--- 更新 ---
我按照下面的示例和链接进行操作,但事情仍然不正确。
我只想要一个简单的测试,它读取一个键和一个值并将其放入会话 cookie,然后我想读回会话值并显示。
所以我初始化了我的会话并将其置于主应用程序状态。
s <- nestSnaplet "" sess $ initCookieSessionManager "config/site_key.txt" "sess" (Just 3600)
第一个混淆是会话初始化功能需要的关键。 在初始项目设置期间未创建密钥。
那么我该如何创建它呢? 项目文件结构中的密钥应该放在哪里以便函数可以找到它?
然后是处理程序:
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"
这个只是读回来并显示。我总是得到一个空字符串,这意味着没有这样的东西。
以上任何内容看起来都不正确吗?我在哪里犯错? 一切编译正确,但会话 cookie 不存在。
【问题讨论】:
标签: haskell haskell-snap-framework