[ROR] 修复“使用POST方法时,通过URL参数改写_session_id无效”的问题

阅读更多
问题:

使用Flash 8提供的FileReference可以方便地一次选择多个文件上传,不过除了在IE上以外,其它浏览器上的都会出现Cookie与浏览器不一致的问题。

解决办法: 直接的做法就是在上传时,附加一个session_id在URL上,在服务端处理时使用这个Session。

在Rails中,可以把_session_id=xxxx附加在URL上。不过测试的结果是,附加的session_id只有在GET请求时才正常,POST请示时会被忽略。

知道了这一点,只需要寻找GET和POST请求处理的差别。也费了一番周折,才发现问题出在actionpack/lib/action_controller/cgi_ext/raw_post_data_fix.rb里。

只需要在POST时也处理一下URL参数即可。由于它是通过read_query_params方法来分开处理的,所以要在POST请求时,调用一下read_query_params(:get),并把结果合并。代码如下:

@params.merge!(CGI.parse(read_query_params(:get))) if method == :post || method == :put

这行加到initialize_query方法尾部即可。由于原来的方法可能返回了@params,所以也加一行@params在结尾,以免造成不必要的麻烦。

你可能感兴趣的:(Rails,IE,EXT,浏览器,CGI)