スナップセッションの使い方の例を探し回っています。今のところ何もありません。誰かが私にCookieベースのセッションの簡単な例を含む記事や何かを教えてもらえますか?
コードスニペットは非常に応用されます。セッションにユーザー名を入れて、すべてのリクエストの前にその存在と有効性をチェックするようなものです。私は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がありません。