Php 会话信息丢失,看起来是随机的

Php 会话信息丢失,看起来是随机的,php,session,Php,Session,我将尽可能简短地介绍这一点,因此不会浪费太多时间详细介绍我的应用程序的安全性,并坚持使用似乎会导致问题的技术: 在我的域中,我让人们将项目添加到存储在php$\u会话变量中的购物车中。一旦他们提交了带有个人信息的表单(也存储在$_会话中),他们将被重定向到不同域(同一窗口)上的支付服务提供商,并将支付详细信息用密钥散列为POST值。一旦付款被验证并完成,用户将被重定向到一个成功页面(回到我的域),购物车将从$u会话传输到数据库,从而成为下订单 在多种机器、网络和浏览器类型上进行了广泛的测试后,我

我将尽可能简短地介绍这一点,因此不会浪费太多时间详细介绍我的应用程序的安全性,并坚持使用似乎会导致问题的技术:

在我的域中,我让人们将项目添加到存储在php$\u会话变量中的购物车中。一旦他们提交了带有个人信息的表单(也存储在$_会话中),他们将被重定向到不同域(同一窗口)上的支付服务提供商,并将支付详细信息用密钥散列为POST值。一旦付款被验证并完成,用户将被重定向到一个成功页面(回到我的域),购物车将从$u会话传输到数据库,从而成为下订单

在多种机器、网络和浏览器类型上进行了广泛的测试后,我认为这种方法是合理的。然而,一些订单已被空置,并带有新的会话id

合理的假设是,这是由于会话超时造成的,但付款的超时时间是15分钟,而购物车的超时时间是20分钟。此外,当交易在上述时间段(即1分钟)内顺利完成时,我也看到过这种情况

结论: 会话数据在以下任一时间丢失: -将我的域转到支付服务提供商的域,或 -从支付服务提供商返回到我的域

更重要的是:这只发生在部分用户身上,所以从外观上看,这是一个客户端问题


我错过了什么?提前感谢。

在这种情况下,不要使用会话来保存此类敏感数据,请正确创建一个数据库表来保存进度单,这也将允许您验证系统中的滥用行为,因为您将拥有这些记录。如果每一次机会订单安全返回,那么要么将其状态从progress更改为paid,要么将试用数据发送到实际订单表中。是的,您的会话只能在您的域上使用,而不能在第三方上使用。感谢您的回复Prix,我已经倾向于此解决方案,但可以使用建议我如何决定从待定状态更新到付费的订单?在重定向到我的域时,支付服务提供商不会传递与客户端相关的任何类型的标识符。这就是为什么我会使用sessions,在实际发送产品之前将订单与收到的付款进行比较,以防止误用。我知道会话只在创建它们的域中可用,这不是问题。可能会话cookie在客户端丢失了。您必须在付款之前将订单从会话移动到数据库中。。。