【问题标题】:Maintaining session across relay domain?跨中继域维护会话?
【发布时间】:2011-02-09 08:34:25
【问题描述】:

我正在 asp.net 中构建支付页面,但是您订购商品的页面在我的域上以 HTTP(非安全)运行。

当将用户重定向到支付网站时,我必须通过不同的域(我的支付提供商,我从那里借用 SSL 证书),所以我的支付 URL 最终类似于 https://www.paymentprovider.com/somescript.cgi/www.mydomain.com/mypaymentpage.aspx

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

我可以以某种方式在查询字符串中发送 SessionID,并从中恢复会话 - 还是我需要将整个订单填充到查询字符串中? (不太确定它是否适合,它相当长)

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

【问题讨论】:

    标签: asp.net session cross-domain


    【解决方案1】:

    史蒂芬

    正确的方法是使用您与付款一起发送的唯一 orderId,然后 付款网关将其发回给您

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

    Paypal 就是这样做的,您需要在订单中向 paypal 发送一个唯一 ID,您只能在一次交易中使用该 ID,然后 paypal 基于此 ID 进行参考。

    您所说的会话和 cookie 的另一种方式是不安全的,两者都可能过期、丢失,等等。无论如何,会话都保存在 cookie 中。更长的会话时间可以让你所有准备工作的东西都必须工作 - 但它对会话或 cookie 发生的事情是不安全和随机的。

    【讨论】:

    • 问题是订单没有存储在数据库中,但我想我必须改变它,所以我可以使用 OrderID 方法。感谢您的评论。
    • @Steffen 是的,您绝对必须修复一种存储唯一 orderID 的方法,即使订单处于打开状态 - 每个新订单都必须获得一个新的唯一 orderID,这就是您在每个订单上传递的内容在您的页面中显示状态。
    • 我已经开始运行了。我在数据库中创建每个订单,并在域之间传递时为我的查询字符串使用 guid。我使用 guid,因此人们不能只在 1、2、3 等中进行绘图来查看其他人的订单。我意识到这并不完美,但是当我被查询字符串困住时,它几乎是我能得到的最好的。再次感谢您的建议 :-)
    【解决方案2】:

    为什么不在重定向之前将 Session 加载到 Cookie 中,当用户到达您的支付区域时,从该 cookie 重新创建会话?

    【讨论】:

    • 那将不仅仅是不安全的
    • 这不起作用,因为 cookie 不可用,因为我在不同的域中。
    猜你喜欢
    • 2015-11-22
    • 2023-03-14
    • 2012-03-08
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 2011-07-28
    • 1970-01-01
    相关资源
    最近更新 更多