Javascript 如何正确处理页面刷新?

Javascript 如何正确处理页面刷新?,javascript,jquery,python,google-app-engine,google-cloud-datastore,Javascript,Jquery,Python,Google App Engine,Google Cloud Datastore,我的页面上有一个包含许多字段的表单。一旦用户输入一个值,我就将字段值保存在数据存储中(无需等待表单提交)。一些分数根据字段值计算并显示给用户。我还生成用户的客户端id,并将其存储在用户的cookies中一小时 我不确定用户在浏览器中刷新页面时会发生什么: 如果用户在FF中按F5,则字段值仍显示在浏览器中 当用户按下Ctrl+F5时,值被清除 在这两种情况下,我都不想为此用户创建新记录,因此客户端id应该保持不变。但在场景(1)中,我不应该清除数据存储中的字段值及其分数,但我应该在场景(2)中这样

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

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

  • 如果用户在FF中按F5,则字段值仍显示在浏览器中
  • 当用户按下Ctrl+F5时,值被清除

  • 在这两种情况下,我都不想为此用户创建新记录,因此客户端id应该保持不变。但在场景(1)中,我不应该清除数据存储中的字段值及其分数,但我应该在场景(2)中这样做。在服务器端,我如何识别这一点?

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

    就好像你要进入网站,填写表格,然后再次点击提交


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

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

    如果用户刷新页面,请使用会话ID从数据库中检索值


    当用户单击提交按钮并成功地向数据库查询值时。销毁会话ID重置表单字段…

    最好的方法是,加载页面时,应检查每个表单字段是否已保存在数据库中,否则请尝试一些客户端表单字段缓存技术。

    为什么要创建客户端ID?@ShayErlichmen,它是在服务器端创建的。如果它保存在数据存储中,我该怎么办?在相应的字段中显示吗?(实际上我有大约150个字段)