[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在结尾,以免造成不必要的麻烦。
使用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在结尾,以免造成不必要的麻烦。
上一篇: 【对接抖店平台】对接抖音小店开发流程---接口调用组成部分介绍
下一篇: Python遗漏知识点二