欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[ROR] 修复“使用POST方法时,通过URL参数改写_session_id无效”的问题 博客分类: Ruby RailsIEEXT浏览器CGI 

程序员文章站 2024-03-24 10:29:28
...
问题:

使用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在结尾,以免造成不必要的麻烦。