在 Heroku 上的 Sinatra 应用程序中,会话未在 Dynos 之间共享

发布于 2024-11-09 15:14:12 字数 32 浏览 0 评论 0原文

这是有道理的。但解决这个问题的首选解决方法是什么?

Which makes sense. But what are some preferred work arounds for this issue?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

半葬歌 2024-11-16 15:14:12

在我的评论中,我建议使用 基于机架 cookie 的会话,但是仔细研究一下,无论如何,Sinatra 会话都是 Rack cookie 会话。

进一步看,我在 Sinatra 文档中发现了这一点

为了提高安全性,cookie 中的会话数据使用会话密钥进行签名。 Sinatra 会为您生成一个随机秘密。但是,由于此秘密会随着应用程序的每次启动而变化,因此您可能需要自己设置秘密,以便所有应用程序实例共享它:

<块引用>

set :session_secret, '超级秘密'

所以看来每个 Heroku dyno 都生成不同的密钥,因此无法读取彼此的会话 cookie,并且您需要指定一个密钥,以便每个 dyno 使用同一个。

您可能最好设置一个环境变量<,而不是在源代码中添加密钥/a>:

$ heroku config:add SESSION_KEY=a_longish_secret_key

然后在你的 sinatra 应用程序中:

enable :sessions
set :session_secret, ENV['SESSION_KEY']

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:

To improve security, the session data in the cookie is signed with a session secret. A random secret is generate for you by Sinatra. However, since this secret will change with every start of your application, you might want to set the secret yourself, so all your application instances share it:

set :session_secret, 'super secret'

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:

$ heroku config:add SESSION_KEY=a_longish_secret_key

Then in your sinatra app:

enable :sessions
set :session_secret, ENV['SESSION_KEY']
绝對不後悔。 2024-11-16 15:14:12

您还可以使用 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.

祁梦 2024-11-16 15:14:12
# In your app.rb file just add following - 
enable :sessions
set :session_secret, "some_random_value" 
# In your app.rb file just add following - 
enable :sessions
set :session_secret, "some_random_value" 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文