我正在一家小型电子商店进行简单的结账,我想让用户选择最终审核。所以流程是篮子 - > 买方信息 - > 订单审核 - > 订单确认。
现在的问题是,在第2阶段和第3阶段之间传输数据的最佳方式是什么?
一种选择是使用HTML和隐藏的表单字段。缺点是我必须在第3阶段后进行另一次输入检查(因为输入可由用户修改)。
另一种选择是使用会话。由于订单存储在一个对象(Sf2 Entity)中,我必须将其转换为一个数组,然后再将其转换回来。另外,我读过将过多数据放入会话变量会对性能产生负面影响。
第三个选项将存储在数据库中,但我希望在最终确认之前不存储任何内容。
还有更好的选择吗?
答案 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');