2010-04-18 65 views
0

我在asp.net中构建了一个付款页面,但是您订购物品的页面在我的域中以HTTP(非安全)方式运行。跨中继域维护会话?

当将用户重定向到支付网站,我必须要经过不同的域(我的支付服务提供商,从他们那里我借用SSL证书),所以我的付款网址结束了像https://www.paymentprovider.com/somescript.cgi/www.mydomain.com/mypaymentpage.aspx

现在的问题是我的会话丢失了,但我在会话中存储了订单,所以我非常需要它。

我可以以某种方式发送查询字符串中的SessionID,并从它恢复会话 - 或者我需要将整个订单填入查询字符串? (不太肯定它会适应不过,这是相当长)

任何帮助将不胜感激:-)

回答

1

斯特芬

正确的方法是使用你用支付发送一个唯一订单ID,然后支付网关其发回给你

它并不像声音那么简单,因为为了安全起见,您需要ether来加密orderID,然后发送它并加密,否则每个人都可以看到并更改您的订单,以太通信可以与支付网关进行某种加密协议。

贝宝以这种方式,您需要发送给贝宝一个唯一的ID,您可以使用它只有一次的交易,然后贝宝使这个ID的参考基础。

你对会话和cookie说的另一种方式是不安全的,两者都可以过期,失去,以往任何时候。会话仍然保存在cookie上。更长的会话时间可以使你所有的工作 - 但它不安全和随机发生会话或cookie的事情。

+0

问题是订单没有存储在数据库中,但我想我必须改变它,所以我可以使用OrderID方法。感谢您的评论。 – Steffen 2010-04-18 14:01:23

+0

@Steffen是的,您绝对必须确定一种方法来存储唯一的订单ID,即使订单保持打开状态 - 每个新订单都必须获得一个新的唯一订单ID,这就是您在页面上的每个状态下传递的顺序。 – Aristos 2010-04-18 14:36:09

+0

我已经得到它现在运行。我创建数据库中的每一个订单,并在域之间传递时使用我的querystring的guid。 我使用一个guid,所以人们不能只在1,2,3等情况下查看其他人的订单。 我意识到这并不完美,但是当我被查询字符串卡住时,它几乎是我能得到的最好的。 再次感谢您的建议:-) – Steffen 2010-04-18 19:39:44

-2

你为什么不正确的重定向之前加载到会话一个Cookie,当用户到达您的付款区域,从该cookie重新创建会话?

+0

那会比不安全 – 2010-04-18 13:53:03

+0

而且不起作用,因为cookie不可用,因为我在不同的域上。 – Steffen 2010-04-18 14:00:24