私は、スナップセッションの使い方の例を取り上げています。これまでのところはありません。 誰かが、クッキーベースのセッションの簡単な例を挙げて、記事や何かを教えてください。ハスケルスナップ:セッションの例
コードスニペットは非常にうまく処理されます。 セッションにユーザー名を入れて、すべての要求の前にその存在と妥当性をチェックするようなもの。私はSnap.extension.sessionを見ましたが、私はまだライブラリー・コードからそれを使用する方法を理解するにはあまりにも午後です。
私はsetInSessionがクッキーにセッション値を置くための機能であることを理解し、私はかなりの署名から、それを使用する方法を見つけ出すカント:
setInSession k v = Map.insert k v `liftM` getSession >>= setSession
またはどのように一緒に全体のことをGLUします。
例のコードを少し尋ねるルールに違反しているかどうかはわかりませんが、ネット上で何かを見つけることができれば私はしません。
ありがとうございます。
--- --- UPDATE
は、私は以下の例に続き、リンクが、物事はまだ右アウト来ていません。
私はちょうどキーと値を読み取り、それをセッションクッキーに入れて、セッション値を読み込んで表示したいという簡単なテストをしたいのです。
私はセッションを初期化し、アプリケーションのメイン状態にしました。
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"
この1つだけのWebフォームからキーと値を読み取り、クッキーにキーと値のペアを置くことになっています。まあ、明らかにそうではありません。
shCookie :: Handler App App()
shCookie = do
v <- with sess $ getFromSession "key"
heistLocal (bindString "message" (fromMaybe "" v)) $ render "reply"
これはただ読んで表示します。私はいつも空の文字列を取得します。つまり、そのようなことはありません。
上記のいずれかが間違っていますか?どこで私は間違いをしますか? すべてが正しくコンパイルされますが、セッションCookieは存在しません。
ありがとうございます。私はあなたのリンクに従ったが、物事は何らかの理由でまだ仕事をしていない。私は混乱の点を少しでも残して、元の質問を更新します。 –
更新された回答を見る – Yuras
ニース。今はすべてが動作します。私が必要としたのは、あなたが提案したようにcommitSessionを追加することでした。ありがとうございました。大きな助け。 –