多页结帐 - 传输数据

时间:2011-09-16 01:42:21

标签: php symfony checkout

我正在一家小型电子商店进行简单的结账,我想让用户选择最终审核。所以流程是篮子 - > 买方信息 - > 订单审核 - > 订单确认

现在的问题是,在第2阶段和第3阶段之间传输数据的最佳方式是什么?

一种选择是使用HTML和隐藏的表单字段。缺点是我必须在第3阶段后进行另一次输入检查(因为输入可由用户修改)。

另一种选择是使用会话。由于订单存储在一个对象(Sf2 Entity)中,我必须将其转换为一个数组,然后再将其转换回来。另外,我读过将过多数据放入会话变量会对性能产生负面影响。

第三个选项将存储在数据库中,但我希望在最终确认之前不存储任何内容。

还有更好的选择吗?

4 个答案:

答案 0 :(得分:2)

我认为会话变量在这里应该没问题,除非你有大量的表单数据。如果您担心内存,最终确认后可以随时删除该数据。

答案 1 :(得分:2)

您可以将这些数据存储在缓存级别(如APC或Memcached)并设置过期时间。

或者,就像Yii's solution一样,使用隐藏输入,并将值设置为:hash(secret + base64(data))+ base64(data),您应该在阶段3中首先验证哈希值。

忘了我糟糕的英语。 :)

答案 2 :(得分:1)

会议对这项工作很好。您可以调整会话处理,以便将数据存储在数据库中。缓存并不是更快,因为它也只是一个数据库读取/写入过程。

答案 3 :(得分:1)

我会用flashdata将它保存在会话中。这很完美,会议在你想要的时候被清除。

在symfony 2中使用flashdata:

$this->get('session')->setFlash('key', 'value');