2010-07-06 77 views
1

好的,这里是大图片,我有2个站点,称它们为SiteA和SiteB。 SiteA在电子商务交易中充当主站点(我们在我们的信用卡处理公司中只有一个帐户,所以成功/拒绝的交易重定向到SiteA)在Rails应用程序之间发布数据

因此,用户登录到SiteB,通过购买程序并提交表格,并将信息卡细节发送给信用卡验证公司,一旦交易成功,SiteA将收到信用卡处理公司发送的所有必要信息(以POST方式)。在这一点上对站点A的代码的基础上,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上数据的进一步处理失败。

这两个网站都运行完全相同的代码。

我的问题,有没有一种方法可以请求SiteB的会话数据,并在SiteA发送数据时将其附加到Post数据。

非常感谢

回答

1

如果这两个网站在同一台物理机器上运行,你可以随时使用类似的Memcache作为一种简单的方法来两个原本不相关的网站之间交换状态信息。如果他们在不同的机器上,使用POST可能是你唯一合理的选择,尽管它最终会变得更麻烦。

如果SiteB必须转发到SiteA进行一些处理,并且SiteA需要将访问者返回到SiteB,则需要在这两个应用程序上创建一个私有API。您通常可以通过创建一个简单的REST接口并根据您的喜好以简单的序列化格式(如YAML或JSON)转储所需的任何内容。

  • 访问者从网站B经由HTTP重定向转发到站点A:

    例如,如下的过程可能是大致。

  • 访问者在SiteA上进行交易,并在数据库中创建一个具有唯一标识符的记录,该记录反映此交易的结果。
  • SiteA使用此唯一标识符作为参数将访问者转发回SiteB。
  • SiteB向SiteA发出请求以检索此事务的详细信息。
  • SiteB根据需要更新其内部记录,并向访问者呈现交易结果。

为了安全起见,您应该生成随机的唯一标识符,因为诸如UUID之类的东西会阻止人们通过猜测数字来检查任意的命令。您还应该确保调用SiteA以检索交易详情具有某种访问控制,即使它只是一个秘密令牌或密码。更强大的实现可能会使用TLS和SSL证书来验证任何请求的来源。

相关问题