Haskell快照:会话示例
我一直在谷歌上搜索如何使用快照会话的示例。目前还没有。 someon能给我指一篇文章或一些关于基于cookie会话的简单例子吗 一段代码片段将非常有用。 类似于在会话中放置用户名,并在每次请求之前检查其存在性和有效性。我查看了Snap.extension.session,但我仍然不知道如何从库代码中使用它 我知道setInSession是将会话值放入cookie的函数,但我无法从签名中完全理解如何使用它:Haskell快照:会话示例,haskell,haskell-snap-framework,Haskell,Haskell Snap Framework,我一直在谷歌上搜索如何使用快照会话的示例。目前还没有。 someon能给我指一篇文章或一些关于基于cookie会话的简单例子吗 一段代码片段将非常有用。 类似于在会话中放置用户名,并在每次请求之前检查其存在性和有效性。我查看了Snap.extension.session,但我仍然不知道如何从库代码中使用它 我知道setInSession是将会话值放入cookie的函数,但我无法从签名中完全理解如何使用它: setInSession k v = Map.insert k v `liftM` get
setInSession k v = Map.insert k v `liftM` getSession >>= setSession
或者如何把整个东西粘在一起
我不知道要求一些示例代码是否违反规则,但如果我能在网上找到任何东西,我不会这么做
先谢谢你
---更新---
我遵循了下面的例子和链接,但事情仍然不顺利
我只需要一个简单的测试,读取一个键和一个值,并将其放入会话cookie中,然后我想读回会话值并显示出来
因此,我初始化了会话并将其置于主应用程序状态
s <- nestSnaplet "" sess $ initCookieSessionManager "config/site_key.txt" "sess" (Just 3600)
sSnap.extension.session
是否表示模块?AFAIK已弃用snap auth
包
您可以使用新的实现为
查看如何设置应用程序以使用会话和身份验证Snaplet。然后,您将能够在会话中存储数据:
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"
增加:
将自动创建具有站点密钥的文件。函数initCookieSessionManager
(已定义)使用clientsession
包中的getKey
函数(请参阅)。从文档中:如果文件不存在或已损坏,将生成一个随机密钥并存储在该文件中。
我认为您的处理程序不起作用,因为您没有提交会话(请参阅
commitSession
),您可以在每个更新会话的处理程序中提交它,或者使用wrapHandlers
和/或with session
自动执行该操作。谢谢您的示例。我关注了你的链接,但由于某些原因,事情仍然不起作用。我将更新我原来的问题,增加一些困惑点。很好。现在一切都好了。我所需要的只是按照你的建议增加佣金。非常感谢。帮助很大。示例链接已断开。仅仅是我还是几乎不可能找到快照身份验证的示例代码?@phatmann您是否尝试通过Snap init
生成简单的项目?它包含一个注册、登录和logout@Yuras,只是看了一下snap init代码,这正是我想要的。非常感谢!这确实解释了为什么没有人发布一个示例项目:-)我现在就要开始并将我的happstack lite项目切换到snap!
shCookie :: Handler App App ()
shCookie = do
v <- with sess $ getFromSession "key"
heistLocal (bindString "message" (fromMaybe "" v)) $ render "reply"
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"