【问题标题】:Uploadify, Flash Sessions, and Rails 2.3.8Uploadify、Flash 会话和 Rails 2.3.8
【发布时间】:2011-07-18 23:38:18
【问题描述】:

我正在使用 Uploadify 2.1.4 和 rails 2.3.8。我正在尝试应用 FlashSessionCookieMiddleware 修复程序,该修复程序应该在 uploadify 的基于 flash 的请求期间维护会话信息。在阅读了其中一些指南后,我已应用此修复:

但是,我的会话信息仍然没有被转移。下面看一下我的应用配置:

# config/environment.rb 

config.load_paths += %W( #{RAILS_ROOT}/config/middleware )

...

# config/middleware/flash_session_cookie_middleware.rb

require 'rack/utils'

class FlashSessionCookieMiddleware
  def initialize(app, session_key = '_session_id')
    @app = app
    @session_key = session_key
  end

  def call(env)
    if env['HTTP_USER_AGENT'] =~ /^(Adobe|Shockwave) Flash/
      params = ::Rack::Utils.parse_query(env['QUERY_STRING'])
      env['HTTP_COOKIE'] = [ @session_key, params[@session_key] ].join('=').freeze unless params[@session_key].nil?
    end
    @app.call(env)
  end
end

ActionController::Dispatcher.middleware.insert_before(ActionController::Base.session_store, FlashSessionCookieMiddleware, ActionController::Base.session_options[:key]) 

...

// My Uploadify JS 
'fileDataName'   : 'file',
'queueID'        : 'fileQueue',
'auto'           : true,
'multi'          : true,
'method'         : 'get',
'scriptData'     : { session_key: '<%= request.session_options[:key] %>'}

我的中间件代码加载正常,rake 中间件显示如下:

use Rack::Lock
use ActionController::Failsafe
use FlashSessionCookieMiddleware, "_my_app_session"
use ActiveRecord::ConnectionAdapters::ConnectionManagement
use ActiveRecord::QueryCache
use ActiveRecord::SessionStore, #<Proc:0xb7176760@(eval):8>
use ActionController::ParamsParser
use Rack::MethodOverride
use Rack::Head
use ActionController::StringCoercion
run ActionController::Dispatcher.new

然后,我尝试测试最后一个请求是否具有有效的会话/cookie 信息:

# In Controller
logger.info "Session: #{session.inspect}"

在 log/development.log 中只打印一个空哈希:

Session: {}

[Sniff] 谁能看出我做错了什么?

【问题讨论】:

    标签: jquery ruby-on-rails session


    【解决方案1】:

    想要在 Rails 3.0 中通过 uploadify 解决会话问题的朋友,请到这里来:http://www.damiangalarza.com/posts/ruby-on-rails/using-uploadify-with-rails-3/

    【讨论】:

    • 谁询问了 3.0 版?!
    • 对于那些在谷歌上搜索并来到这个页面的人。 :-)
    【解决方案2】:

    我能够通过此处发布的步骤使其在 2.3.8 上运行:http://railstips.org/blog/archives/2009/07/21/uploadify-and-rails23/

    我唯一需要修改的是 flash_session_cookie_middleware.rb 到以下内容:

    require 'rack/utils'
    
    class FlashSessionCookieMiddleware
      def initialize(app, session_key = '_session_id')
        @app = app
        @session_key = session_key
      end
    
      def call(env)
          if env['HTTP_USER_AGENT'] =~ /^(Adobe|Shockwave) Flash/
            @session_key = ActionController::Base.session_options[:key]
            req = Rack::Request.new(env)
            unless req.params[@session_key].nil?
              env['HTTP_COOKIE'] = "#{@session_key}=#{req.params[@session_key]}".freeze
            end
          end
    
          @app.call(env)
        end
    end
    

    【讨论】:

      猜你喜欢
      • 2011-06-09
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 2011-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多