在 Heroku 上的 Sinatra 应用程序中,会话未在 Dynos 之间共享
这是有道理的。但解决这个问题的首选解决方法是什么?
Which makes sense. But what are some preferred work arounds for this issue?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
在我的评论中,我建议使用 基于机架 cookie 的会话,但是仔细研究一下,无论如何,Sinatra 会话都是 Rack cookie 会话。
进一步看,我在 Sinatra 文档中发现了这一点:
所以看来每个 Heroku dyno 都生成不同的密钥,因此无法读取彼此的会话 cookie,并且您需要指定一个密钥,以便每个 dyno 使用同一个。
您可能最好设置一个环境变量<,而不是在源代码中添加密钥/a>:
然后在你的 sinatra 应用程序中:
In my comment, I suggested using rack cookie based sessions, but looking into it, the Sinatra sessions are Rack cookie sessions anyway.
Looking further, I found this in the Sinatra docs:
So it seems each Heroku dyno is generating a different key, and so can't read each others session cookies, and you need to specify a key so each dyno uses the same one.
Rather than add a secret key to your source code, you're probably better setting an environment variable:
Then in your sinatra app:
您还可以使用 memcached 会话来提高性能或安全性。没有尝试过,但看起来很简单。 Heroku 上免费 5MB。
You can also use a memcached session for performance or security. Have not tried it but looked easy. 5MB free on heroku.