【问题标题】:Invalid Form Submissions-- what to do with them?无效的表单提交 - 如何处理它们?
【发布时间】:2011-01-08 18:40:52
【问题描述】:
我最近阅读了大量有关 Web 应用程序设计最佳实践的文章。我的专业语言是 PHP/MySQL。在为我正在开发的应用程序创建 MVC 架构时,我总是遇到在哪里存储无效表单提交的问题(这样用户不必重新输入数据,并且可以显示有用的错误消息) .
通常我已经解决了将其作为序列化对象存储在 SESSION 变量中的方式,但我最近的阅读告诉我会话很糟糕,并且与无状态 Web 开发无关。我想到的一些替代方案是:
- 将其存储在数据库中,就像使用有效输入一样,但将其标记为无效
- 将其存储在数据库中针对无效表单提交的单独表中
- 将其存储在文本文件中
它们都有缺点。
- 并非所有表单都会导致创建(单个)数据库实体。
- 和 3. 两者似乎与 SESSION 变量的想法相同
你会推荐什么?
【问题讨论】:
标签:
php
mysql
model-view-controller
error-handling
frameworks
【解决方案1】:
根本不存储它,只需向用户显示错误消息和表单的另一个副本。使用您拥有的数据(在 $_POST/$_GET 中,因为您在 PHP 中工作)使用先前输入的数据预填充表单。
【解决方案2】:
如果表单是公开的,而您没有对其进行用户身份验证,则会话结束时您将失去访问者。
- 所以
SESSION 是要考虑的。
- 如果您有用户,您可以将其作为序列化对象保存到
database。
- 另一种是使用
HTML5 local storage,这是最好的方法,但目前只有少数浏览器支持。
【解决方案3】:
1) 如果您在循环或负载平衡方案中将应用程序分布在两台或多台服务器上,您可能会遇到会话问题,但如果您没有计划将应用程序扩展到一台服务器以上,那么这将不适用
2) 您可以在服务器和浏览器之间的 cookie 中来回传递数据。可能使用 cookie 数组将数据保存在一起。这样,如果用户在负载平衡场景中被轮询,那么数据将跟随他们轮换,状态是无关紧要的。