多页结帐-传输数据


Multi-page checkout - transferring the data

我正在一家小商店做一个简单的结帐,我想给用户一个最终审查的选项。所以流程是购物篮 -> 买方信息 -> 订单审核 -> 订单确认

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

一个选项是使用HTML和隐藏表单字段。缺点是我必须在阶段3之后做另一个输入检查(因为输入是由用户修改的)。

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

第三个选项将存储在数据库中,但我宁愿不存储任何东西,直到最后确认。

有更好的选择吗?

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

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

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

忘记我糟糕的英语。:)

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

我会将其保存在会话中,使用flashdata。这工作完美,会话被清除时,你想要的。

在symfony中使用flashdata:

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