好的,所以这是大局,我有2个站点,称他们为SiteA和SiteB。 SiteA在电子商务交易中作为主站点(我们的信用卡处理公司只有一个帐户,因此成功/拒绝的交易被重定向到SiteA)
因此,用户登录到SiteB,完成购买流程并提交带有信用卡详细信息的表单,该信息卡详细信息将发布到信用卡验证公司,成功交易后SiteA会收到所有必要信息(以POST方式) )由信用卡处理公司发送。此时,SiteA上的代码基于param确定事务源自哪个站点,并使用此代码再次将数据发送到该站点
Net::HTTP.post_form(URI.parse("http://#{params[:site_name]}/success"), params)
success
在routes.rb中定义为
map.connect 'success', :controller => "some_controller", :action => "success"
然而问题是,虽然用户登录SiteB,但是当SiteB收到SiteA发布的数据时(显然对SiteB的session_id一无所知),SiteB上的数据的进一步处理由于缺少会议信息。
两个站点都运行完全相同的代码。
我的问题是,有哪种方法可以在SiteA发送数据时请求SiteB的会话数据并将其附加到Post数据。
非常感谢
答案 0 :(得分:1)
如果这两个站点在同一台物理计算机上运行,您可以使用Memcache之类的东西作为在两个不相关的站点之间交换状态信息的简单方法。如果他们在不同的机器上,使用POST可能是您唯一合理的选择,尽管最终会更难以实施。
如果SiteB必须转发到SiteA进行某些处理,并且SiteA需要将访问者返回给SiteB,则需要在两个应用程序上创建私有API。您通常可以创建一个简单的REST接口,并根据您的偏好以简单的序列化格式(如YAML或JSON)转储您需要的任何内容。
例如,程序可能大致如下:
为了安全起见,您应该生成随机唯一标识符,因为类似UUID的内容会阻止人们通过猜测数字来检查任意订单。您还应该确保调用SiteA以检索事务详细信息具有某种访问控制,即使它只是一个秘密令牌或密码。更强大的实现可能会使用TLS和SSL证书来验证任何请求的来源。