【问题标题】:Rails session not persisting after redirectsRails 会话在重定向后不会持续存在
【发布时间】:2015-06-15 02:39:53
【问题描述】:

我正在使用会话存储将数据保存到会话中。我的初始化程序/session_store.rb 看起来像:

::Application.config.session_store :active_record_store

向会话代码添加数据:

book = Book.find(1)
session[:abc] = book

我正在另一个页面访问此会话数据。访问会话数据:

book = session[:abc]

问题是我的会话数据在重定向之间没有保留。可能是什么问题?

我可以看到我的会话正在按预期保存数据,但是当重定向发生时它会丢失一些数据,如果再次发生重定向,它会丢失更多数据。令人沮丧的是。

【问题讨论】:

  • 你应该添加一些关于你如何写入和读取会话的信息。即,没有给出您期望的结果的代码。
  • @MaxWilliams,我认为这是可以理解的。无论如何,我已经编辑了我的问题。现在呢?
  • 请发布您的控制器代码
  • @MaxWilliams,你能帮他解决这个问题吗?
  • @AmitSharma,我也有同样的问题。

标签: ruby-on-rails session ruby-on-rails-4


【解决方案1】:

你可以试试这个 将 book id 传递给 session 而不是整个 book 对象。

例如

A页

book = Book.find(1)
session[:abc] = book.id

B页

book = Book.find(session[:abc])

【讨论】:

    【解决方案2】:

    你没有忘记添加会话表吗?

    rails g active_record:session_migration
    rake db:migrate
    

    【讨论】:

    • mySql 数据库中有会话表。
    • 奇怪,应该够用了……我稍后试试。
    • 你重定向到的页面在同一个子域中?
    • @RahulBhargava 我刚刚建立了一个小应用程序,所需的最少步骤是:1) 切换到:active_record_store 2) 添加迁移和迁移(如我的回答)3)gem 'activerecord-session_store' 添加到 Gemfile。如果您想尝试找出不同之处,我已将我的应用程序 hereindex#firstsession[:abc] 设置为 Book.first 并重定向到 index#second 显示 session[:abc].name
    【解决方案3】:

    您可以在 Book 模型中编写方法。

    def self.current=(book)                
      Thread.current[:current_book] = book  
    end
    
    def self.current  
      Thread.current[:current_book]  
    end    
    

    向会话代码中添加数据,

    book = Book.find(1)  
    Book.current = book  
    

    并且,要从会话中访问书籍,您可以调用方法

    Book.current
    

    【讨论】:

    • 您能解释一下为什么使用线程来设置和访问值吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 2015-01-28
    • 1970-01-01
    • 2015-02-15
    • 2016-04-14
    • 1970-01-01
    • 2019-05-25
    相关资源
    最近更新 更多