1

我正在用 PHP 开发一个 UI 框架。这个想法与.NET 平台非常相似。开发了不同的 php 类来呈现 DOJO 控件。简而言之,该框架生成 Javascript 代码以在客户端呈现 DOJO UI 控件。过程如下:

第一个请求:

  • URL GET 请求到达服务器。
  • 服务器执行加载表格的相关脚本。
  • 调用每个子控件的渲染函数(这会生成 javascript 代码)
  • 序列化整个 FORM 对象并将其保存到 SESSION 文件中。
  • 将 JS 代码输出到客户端。

后续请求:

  • FORM 回发请求到达服务器。
  • 服务器从 SESSION 文件加载以前的状态(使用反序列化)。
  • 使用用户提交的值更新状态对象。
  • 调用事件处理程序。
  • 将当前状态保存在 SESSION 文件中。
  • 向客户端呈现响应。

上述过程非常适合来自同一会话的单个请求。我需要一次处理来自同一会话的多个请求。

问题:

假设分别来自同一会话 R1 和 R2 的两个请求。R1 需要 10 秒才能完成,而 R2 需要 3 秒。当 R1 处于 5 秒时,R2 来并在 R1 处于 8 秒时更新状态文件。之后,R1 在 2 秒后再次更新状态文件。

问题是请求 R2 对状态文件所做的更改丢失了。

如何在 PHP 中处理上述场景?在 UI 框架中,我可以遵循任何设计模式来进行状态管理吗?

4

1 回答 1

0

每次请求表单时生成一个唯一键 (GET) 并将其作为隐藏输入字段放入表单中。这是缓解 CSRF 攻击的常见做法,因此您还可以使用它来查看与每个 GET 请求相关的表单帖子。也许它将成为存储在会话中的表单数组的关键。

旁注:在每个 GET 请求的会话中存储一些序列化的表单数据似乎是多余的。在大多数情况下,您的表单在所有用户中都是相同的。在 POST 上,您大概知道表单应该“看起来”是什么样的(尽管我想您这样做是为了概括表单处理程序)。

于 2013-08-02T21:18:52.883 回答