Я искал пример использования сеанса Snap. Пока ничего.
Кто-нибудь может, пожалуйста, указать мне статью или что-то с простым примером сеанса на основе файлов 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"
Этот код просто читает ключ и значение из веб-формы, и предполагается, что пара «ключ-значение» помещается в файл cookie. Ну, видимо, это не так.
shCookie :: Handler App App ()
shCookie = do
v <- with sess $ getFromSession "key"
heistLocal (bindString "message" (fromMaybe "" v)) $ render "reply"
Этот просто читает его и отображает. Я всегда получаю пустую строку, что означает, что такой вещи нет.
Что-нибудь из вышеперечисленного выглядит неправильно? Где я могу ошибиться?
Все компилируется правильно, но сессионный cookie просто отсутствует.