ruby - 在 Sinatra 中获取唯一的 session ID

标签 ruby sinatra

我有一个使用 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/

相关文章:

ruby - 惰性 JSON 编码

ruby - $ GEM_HOME和$ GEM_PATH在旅客中设置错误

ruby - 乘客架应用程序 'cannot infer basepath'

ruby - Sinatra+ Prawn 的例子?

ruby - 正则表达式修改文本

ruby - 我应该如何测试 Mailman 应用程序

javascript - ruby on Rails - 无法运行javascript

ruby - 使用 Ruby Sinatra 创建单页代理

mysql - ActiveRecord:一一连接多个数据库

Ruby MongoDB-如何根据日期时间对记录进行排序?