在 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')

appENV 是在启动 rails 控制台时设置的,不需要设置这些

您可以通过一些处理 cookie 的浏览器插件或(cookie 检查器、cookie 管理器...)获得session_id

【讨论】:

【参考方案5】:

Rails 4.0 以后应该是:

session.id

【讨论】:

以上是关于在 rails 3 中查找会话 ID的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails 中的会话如何工作?

Rails 没有在 ajax 帖子上重新加载会话

Rails 登录重置会话

Rails 仅在生产时才在页面重新加载时丢失会话变量 current_user_id(React 16.13、Rails 6、Heroku)

在 Rails 的会话中存储对象

ruby 在Rails 3中解码会话Cookie