2011-04-12 62 views
2

我在我的应用程序中实现支付网关。 其如下所示: 用户填写表单所需的详细信息以及包含return_url(say http://myapp.com/ebs _payment/ebs_response?dr={somedata})的字段,然后将表单提交给安全的付款网站。交易完成后,安全站点将一些加密数据放入我的参数{dr}中,并且用户被重定向回到返回URL。这里的问题是,当用户返回到带有return_url的应用程序时,应用程序无法获取会话数据并返回nil值。导轨不采摘会话数据

在提交表单之前,我将对象@fdPaymentDets放入会话中。

这里是我的控制器:

class EbsPaymentController < ApplicationController 
    #before_filter :login_required,:check_user_authenticate 
    #access_control [:ebs_response] => ('user') 

    def ebs_response 
    @fdPaymentDets = session["fd_payment_details"] 

    @deal = Deal.find(@fdPaymentDets.deal_id) 

    @categories = find_all_categories  
    end 

    private 
    def find_all_categories 
    @sp = SitePreference.find(:first) 
    Category.find(:all,:limit => @sp.categories_display_limit,:order => 'position') 
    end 

end 

当用户从安全的网站重定向到返回URL (http://myapp.com/ebs_payment/ebs_response?dr={encrypted_data}),轨道不接从会话@fdPaymentDets对象,并使其nil从而导致错误时访问来自nil对象的数据。

令人惊讶的是,当我手动将相同的return_url放在我的浏览器中时,会话数据被整齐地挑选出来并且一切都很顺利。

我错过了这里的任何东西吗?可能是什么明显的原因? 任何帮助表示赞赏。

+0

我观察到了同样的问题之前更新的价值,我希望我的问题或你的答案,这是相当严重的东西。 – 2012-06-12 20:43:55

回答

0

Cookie和重定向很麻烦,容易出错(从浏览器的实现角度看)。 看看

Safari doesn't set Cookie but IE/FF does

的建议是改变实现在显示操作首先设置会话,然后重定向