如何正确处理页面刷新?

问题描述:

我在我的页面上有很多字段的表单。一旦用户输入一个值(无需等待表单提交),我将字段值保存在数据存储区中。一些分数是根据字段值计算并显示给用户的。我还生成用户的客户端ID并将其存储在用户的Cookie中一个小时。如何正确处理页面刷新?

我不知道,当用户在浏览器中刷新页面会发生什么:

  1. 如果用户按下FF F5,然后字段值仍然显示在浏览器中;
  2. 当用户按下Ctrl + F5时,则清除值。

在这两种情况下,我都不想为该用户创建新记录,所以客户端ID应该保持不变。但是在场景(1)中,我不应该清除数据存储区中的字段值及其得分,但是我应该在场景(2)中执行。我怎么能在服务器端认识到这一点?

+0

你为什么要创建客户端ID客户端? – 2012-03-08 09:47:05

+0

@ShayErlichmen,它在服务器端创建。 – 2012-03-08 09:53:36

你已经解释过的两种情况是内置在浏览器中的行为。如果您在提交数据的页面上按F5,大多数浏览器都会尝试重新提交表单数据。这是为了避免普通用户丢失数据。

这就好像你要进入网站,填写表格并点击重新提交。

要避免再次处理这些数据,您可以生成一个随机密钥并将其存储在隐藏的表单字段中。然后在提交数据时,将该密钥保存在会话变量中。如果数据被重新提交,您可以检查回传,将表单数据中的随机密钥与会话中的随机密钥进行比较。如果它们相同,那么数据已经被处理。

当用户进入注册页面并将其存储在数据库中时,创建一个SESSION ID。我认为会话ID只会在用户关闭浏览器时才会改变。

如果用户刷新页面,则使用SESSION ID从数据库中检索值。

当用户单击提交按钮并成功查询数据库的值。销毁SESSION ID重置表单字段...

加载页面时,您应该检查是否存在任何已经保存在数据库中的表单字段的最佳方式,否则请尝试一些客户端表单字段缓存技术。

+0

如果它保存在数据存储中,我应该怎么做?显示在相应的字段? (其实我有〜150场) – 2012-03-08 16:32:10