我有一个使用 Sinatra 构建的简单网络应用程序,启用了 session 。
如果我没理解错的话, session 数据存储在编码的 cookie 中。随着 session 数据的变化,cookie 的值也会发生变化。
我需要一个在整个 session 期间保持不变的唯一 session 标识符。有没有这样的标识符。还是我必须创建自己的独特值并将其存储在 session 中?
谢谢!
编辑:在下面的评论中,我想到了一个有用的比较。如果我有一个 Java servlet,我会使用 JSESSIONID 作为唯一标识符。我需要一个与 JSESSIONID 等效的 Sinatra。
最佳答案
因为这是该主题的首批 Google 搜索结果之一,并且不包含任何实际示例,所以这里提供了一种创建您自己的 SESSION_ID 的简单方法。我们依靠概率和加密安全随机性来保持我们的 ID 的唯一性。
这是我放入 cookies 中的唯一东西。我将所有其他数据保存在后端,以防止任何人篡改它。
require 'sinatra'
require 'securerandom'
# The configuration here is just an example. Use your own secret, etc.
use Rack::Session::Cookie, :key => 'SESSION_ID',
:expire_after => 60*60*24, # == one day
:secret => 'This one time, at band camp...'
before do # Before every request, make sure they get assigned an ID.
session[:id] ||= SecureRandom.uuid
end
get '/' do # Show off your new ID.
"Your ID is #{session[:id]}"
end
关于ruby - 在 Sinatra 中获取唯一的 session ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5623982/