Я искал пример для использования Snap-сессии. Пока ничего. Может кто-нибудь указать мне статью или что-то с простым примером сеанса на основе файлов cookie?Haskell Snap: Пример сеанса
Фрагмент кода будет очень аппроксимирован. Что-то вроде помещать имя пользователя в сеанс и проверять его существование и действительность перед каждым запросом. Я посмотрел на Snap.extension.session, но я все еще слишком нуб, чтобы понять, как использовать его только из кода библиотеки.
Я понимаю, что setInSession функция поставить значение сеанса в куки, но я наклоняю достаточно понять, как использовать его с подписью:
setInSession k v = Map.insert k v `liftM` getSession >>= setSession
или как Glu все это вместе.
Я не знаю, не противоречит ли правила запрашивать код примера, но я бы этого не сделал, если бы мог найти что-нибудь в сети.
Заранее спасибо.
--- UPDATE ---
Я последовал пример ниже и ссылки, но все еще не пришедшие прямо.
Мне просто нужен простой тест, который читает ключ и значение и помещает его в файл 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"
Это один просто читает ключ и значение из веб-формы, и, как предполагается поставить пару ключей значение в куки. Ну, видимо, нет.
shCookie :: Handler App App()
shCookie = do
v <- with sess $ getFromSession "key"
heistLocal (bindString "message" (fromMaybe "" v)) $ render "reply"
Этот только что прочитал его и отобразил. Я всегда получаю пустую строку, что означает, что такой вещи нет.
Неверно ли какое-либо из вышеперечисленных? Где я могу сделать ошибку? Все компилируется правильно, но cookie сеанса просто не существует.
Спасибо за пример. Я следил за вашими ссылками, но что-то по-прежнему не работает. Я обновлю свой первоначальный вопрос несколькими путями. –
см. Обновленный ответ – Yuras
Nice. Теперь все работает. Все, что мне было нужно, это добавить commitSession, как вы предложили. Спасибо. Большая помощь. –