如何正确处理页面刷新?

时间:2012-03-08 09:41:49

标签: javascript jquery python google-app-engine google-cloud-datastore

我的页面上有一个包含许多字段的表单。一旦用户输入值,我就会在数据存储区中保存字段值(无需等待表单提交)。一些分数基于字段值计算并显示给用户。我还生成用户的客户端ID并将其存储在用户的cookie中一小时。

我不确定当用户在浏览器中刷新页面时会发生什么:

  1. 如果用户在FF中按下F5,则字段值仍会显示在浏览器中;
  2. 当用户按下Ctrl + F5时,则清除值。
  3. 在这两种情况下,我都不想为此用户创建新记录,因此客户端ID应保持不变。但在方案(1)中,我不应该清除数据存储区中的字段值及其分数,但我应该在方案(2)中进行。我怎样才能在服务器端识别出来?

3 个答案:

答案 0 :(得分:0)

您解释的两个方案是浏览器内置的行为。如果您在提交数据的页面上按F5,大多数浏览器将尝试重新提交表单数据。这是为了避免普通用户丢失数据。

就好像您要进入网站一样,填写表单并再次单击“全部提交”。

为避免再次处理此数据,您可以生成随机密钥并将其存储在隐藏的表单字段中。然后,在提交数据时,将此密钥保存在会话变量中。如果重新提交数据,您可以检查回发,将表单数据中的随机密钥与会话中的随机密钥进行比较。如果它们相同则数据已经处理完毕。

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

最好的方法是,当你加载页面时,如果每个表单字段中都有任何内容已经保存在db中,你应该检查它,否则尝试一些客户端表单字段缓存技术。