Нет. Причина этого не в том, что Flex не передает куки при использовании FileReference # upload. Обходной путь (для Rails 2.3) - вставить пользовательский обработчик промежуточного программного обеспечения для флэш-запросов, который принимает аргументы в строке запроса и добавляет их в среду HTTP_COOKIE до того, как он достигает Rails.
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
Убедитесь, что файл находится в вашем пути загрузки, и добавьте его в файл session_store.rb:
ActionController::Dispatcher.middleware.use FlashSessionCookieMiddleware, ActionController::Base.session_options[:key]
Затем вам нужно будет вывести сессионный ключ в какое-то представление и загрузить его, используя ExternalInterface внутри Flex:
def upload_path_with_session_information
session_key = ActionController::Base.session_options[:key]
uploads_path(session_key => cookies[session_key], request_forgery_protection_token => form_authenticity_token)
end
Как вы можете видеть, у меня есть ресурс, называемый uploads, и я использую помощник upload_path_with_session_information
, чтобы дать мне хороший URL, который, когда POSTED to from FLEX позволяет вам хранить ваш cookie-файл для всего остального.
Честно говоря, я не помню, где я нашел эту информацию в Интернете, но я не могу взять кредит на нее. Надеюсь, это имеет смысл для вас.