Ruby 使用Sinatra的Facebook画布身份验证:签名Cookie(带框架)

Ruby 使用Sinatra的Facebook画布身份验证:签名Cookie(带框架),ruby,facebook,sinatra,rack,session-cookies,Ruby,Facebook,Sinatra,Rack,Session Cookies,我想创建一个安全的cookie,并用我的Facebook应用程序的秘密进行签名,这个秘密只有我知道 我已经实现了一个 这是可行的,但现在,我想向客户端发送一个使用相同签名过程的cookie 我在浏览,它似乎提供了这个功能 然而,我想知道在西纳特拉如何做到这一点。看起来set\u cookie是一个包装器,似乎不接受秘密。所以,我想我必须用Rack来做。我试试看,然后回来汇报 同时,该公司表示,它提供了基于会话的cookie 那么,设置cookie之间的区别是什么: set_cookie("u",

我想创建一个安全的cookie,并用我的Facebook应用程序的秘密进行签名,这个秘密只有我知道

我已经实现了一个

这是可行的,但现在,我想向客户端发送一个使用相同签名过程的cookie

我在浏览,它似乎提供了这个功能

然而,我想知道在西纳特拉如何做到这一点。看起来
set\u cookie
是一个包装器,似乎不接受秘密。所以,我想我必须用Rack来做。我试试看,然后回来汇报

同时,该公司表示,它提供了基于会话的cookie

那么,设置cookie之间的区别是什么:

set_cookie("u", 123)
或设置会话变量:

session["u"] = 123
我发现自己在翻阅Sinatra&Rack的源代码。我有个主意。我认为除了某些默认功能外,它们几乎相同。

一个选项

我建议对这样的facebook应用程序使用服务器端“会话”解决方案。例如,为您提供一个Sinatra“缓存”对象,您可以在其中存储序列化对象。您可以设置redis键的过期时间,这样内存就不会积累太多。我建议使用facebook uid作为缓存的密钥,这样无论用户使用的是什么计算机/浏览器,她的会话都是相同的。此外,这样您就不必担心在iframes中设置cookie,这在Safari和Chrome中不起作用

筛选前:
@session=cache.fetch(“session-{@uid}”){{}

过滤后:
cache.set(“session-{@uid},@session)