【问题标题】:Using session variables to maintain form data during a browser back sequence在浏览器返回序列期间使用会话变量来维护表单数据
【发布时间】:2011-08-19 15:43:21
【问题描述】:

我有一个带有返回按钮的多页表单,如果用户点击返回,我正在尝试使用服务器端的方式来维护表单数据。

我有一个这样的后退按钮:

<button id="backButton">Back</button>

按钮处理程序是这样的:

$('#backButton').live('click',function() {
        window.history.back();
    });

表单的第一部分提交后,我将所有提交的数据放入 $_SESSION 变量中。我什至可以在表单的第二部分回显这些变量,但是当我单击后退按钮转到表单的第一部分时,会话变量不会延续。

我正在正确启动会话,并且我在站点的其他各个部分使用会话变量,它们完美地工作。

按下后退按钮时如何将变量带回?

【问题讨论】:

  • 检查会话 cookie 中的值是否在所有请求之间保持相同。如果它发生变化,那么您很可能由于某种原因得到一个新的空会话 - 例如:会话 cookie 没有“粘”
  • 您确定您的浏览器没有缓存页面的副本吗?尝试"hard refresh"它——这有帮助吗?
  • 是的,它没有缓存页面的副本。

标签: php jquery forms


【解决方案1】:

SoreThumb 的答案#1 是我建议的可能会在我的评论中发生的事情。

但如果是这样的话,那肯定不是无关紧要的。

你可以告诉浏览器在第一次加载时不要缓存它。

请参阅this related questionthis tutorialthis thread

【讨论】:

    【解决方案2】:

    森海塞尔, 我无法掌握您的确切情况,但我可以解决您的问题。以下是我的想法:

    1. 当用户点击“返回”时,他们通常会从浏览器缓存中加载页面。因此,浏览器不会要求 PHP 使用会话变量重新解析页面。尝试点击 shift 或 Control F5 从服务器重新请求页面。
    2. #1 成功与否无关,因为没有用户会认为他们的结果会返回而刷新页面。您必须依赖浏览器或 JavaScript。
    3. 简要回顾一下,查找此内容后,我认为以下解决方案是您的最佳选择:​​i>

    你也可以..

    • 使用 JavaScript 检索表单数据并将内容保存到 cookie,该 cookie 将在表单加载时加载(安全!!注意 XSS..)。您似乎使用 jQuery,这会有所帮助!我不确定安全性,但请阅读$.('#formID').serialize()

    • 依靠浏览器的原生表单保存组件。在审查堆栈溢出时,I found a similar question that had an answer that can help you. 总而言之,如果您的表单是由 JS 自动生成的页面不可缓存(可能是https,或者您的服务器说没有缓存) ,您不能依赖浏览器来保存表单。

    如果我的回答有帮助,请告诉我。

    【讨论】:

    • 据我所知,这不是缓存问题。我什至删除了“window.history.back()”,并将其替换为直接重定向到表单的第一部分(应该,但不是,显示保存在 SESSION 变量中的数据)。
    • @Sennheiser 您是说您尝试刷新页面并执行链接重定向以查看页面是否会从会话中加载数据?虽然我不会使用 session 来加载提交的数据,但我会满足您的愿望:您是否尝试过使用第 1 页中的代码 sn-ps 来加载 session 并执行相同操作的第三个页面?我想数据可能被覆盖,或者由于某些“会话”存在假设或会话加载而在页面首次加载时未加载。
    猜你喜欢
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    相关资源
    最近更新 更多