我正在创建一个基于向导的用于输入用户输入的一系列表单。该向导的一个要求是脚本(PHP)不能将输入保存到数据库(MySQL)中,直到用户单击“保存”按钮,因此我必须设置一种机制将用户输入以一种形式传输到另一种形式当用户点击“上一个”或“下一个”按钮时。我研究了使用各种方法,包括cookies,会话,临时文件等,但我决定将base64_encoded序列化数据嵌入到系列中所有表单中存在的隐藏字段中。此字段中的值将在表单提交中解码,并在插入当前表单中的其他值后插入下一个表单时进行重新编码。在表单提交之间传递base64_encoded序列化数据
这里的隐藏字段的外观示例:
<input type="hidden" name="wizard:presave" value="YTo2OntzOjU6InRpdGxlIjtzOjEwOiJRdWVzdGlvbiAyIjtzOjQ6InRleHQiO3M6MTk6IlllcyBpdCdzIGEgcXVlc3Rpb24iO3M6NDoidHlwZSI7czo2OiJjaG9pY2UiO3M6NzoiY2hvaWNlcyI7YTowOnt9czo1OiJwb2ludCI7aToxO3M6Mjoib3AiO3M6MTM6ImVkaXRfZXhlcmNpc2UiO30=" />
所以问题是:
是它认为是一个好/坏的做法?
HTMLform中隐藏字段是否有长度限制?
有什么可能的安全问题?
有没有更好的选择? (与解释,最好不使用JavaScript)
在此先感谢!
我重新考虑了使用会话和它的工作原理,但我仍然需要设置一个随机的'实例ID'以在提交之间传递,以便用户可以在相同会话上运行多个向导实例而不会互相干扰。但它会引入其他安全问题,如用户混淆实例ID等? – Lukman 2009-12-16 08:24:57
我不这么认为。只要您将正确的随机值存储在会话中,那么唯一可用于操作的参数就是会话令牌本身。 – zombat 2009-12-16 18:21:55
实施,它的工作很好。这里的所有答案都很好,但是这个提供了最好的解释。谢谢。 – Lukman 2009-12-17 03:50:51