在Sinatra中获取唯一的会话ID

Dav*_*acs 5 ruby sinatra

我有一个使用Sinatra构建的简单Web应用程序,并启用了会话。

如果我理解正确,则会话数据存储在编码的cookie中。随着会话数据的更改,cookie的值也将更改。

我需要一个唯一的会话标识符,在整个会话过程中保持不变。是否有这样的标识符。还是我必须创建自己的独特价值并将其自己存储在会话中?

谢谢!

编辑:在下面的评论中,我想到了一个有用的比较。如果我有一个Java servlet,我将使用JSESSIONID作为唯一标识符。我需要一个等效于JSESSIONID的Sinatra。

And*_*ndy 0

据我所知,JSESSIONID它用于在查询字符串中传递会话,而 Sinatra 没有类似的东西,至少不容易访问。Sinatra 使用 Rack 进行会话管理,默认情况下使用 cookie 来存储所有会话数据。Rack 中还有其他会话选项,例如 memcached,其中唯一的会话 id 存储在 cookie 中,但即便如此,Rack 也将其抽象化,因此您不需要查看会话 id(尽管它仍然可以访问,请参阅文档)。

如果您想走这条路,那么请研究一下 Sinatra 中的 Rack 中间件,但如果您需要的只是一个唯一的 ID,那么您自己生成一个并将其存储在会话中可能会更容易。