在 rails 3 中查找会话 ID
Posted
技术标签:
【中文标题】在 rails 3 中查找会话 ID【英文标题】:Finding the session id in rails 3 【发布时间】:2011-06-17 00:37:16 【问题描述】:如何在 rails 3 中获取当前会话 ID?
我尝试了以下方法,但没有成功:
session[:session_id]
session['session_id']
session[:id]
session['id']
session.id
session.session_id
【问题讨论】:
【参考方案1】:我现在无法测试它,但据我所知,Rails 3 上的会话 id 变量从 'id'
更改为 'session_id'
,你试过吗?希望它对你有用。
【讨论】:
yeah..id 变量在 Rails 3 上从 'id' 更改为 'session_id'。如何访问表的 id?【参考方案2】:您是否尝试过以下方法?
request.session_options[:id]
【讨论】:
嗯,这对我来说就像一个 session_id :) Rails 4 中的session.id
。
这是rack
中引入的更改。更多信息:github.com/rack/rack/pull/342
这在#create
的上下文中没有用。因为在会话创建操作之后,新的会话 ID 将被持久化(在我的情况下是 Redis)所以这是不安全的方法【参考方案3】:
它还返回会话 ID:
session[:session_id]
【讨论】:
如果您通过使用reset_session
来使用会话固定保护,则不会【参考方案4】:
如果您需要从 Rails 控制台查看给定会话 id 的会话存储中写入的数据,您可以:
a = Rails.application.config.session_store.new(app, Rails.application.config.session_options)
a.class # => ActionDispatch::Session::RedisStore
a.get_session(ENV, '07319b2485be9ac4850664cd47cede38')
# or a.find_session(ENV, '07319b2485be9ac4850664cd47cede38')
app
和ENV
是在启动 rails 控制台时设置的,不需要设置这些
您可以通过一些处理 cookie 的浏览器插件或(cookie 检查器、cookie 管理器...)获得session_id
【讨论】:
【参考方案5】:Rails 4.0 以后应该是:
session.id
【讨论】:
以上是关于在 rails 3 中查找会话 ID的主要内容,如果未能解决你的问题,请参考以下文章
Rails 仅在生产时才在页面重新加载时丢失会话变量 current_user_id(React 16.13、Rails 6、Heroku)