【问题标题】:Handling fragment identifiers during PHP redirects在 PHP 重定向期间处理片段标识符
【发布时间】:2012-09-21 20:34:27
【问题描述】:

我已经四处搜索(SO 和 Google),但找不到任何关于其他人如何处理这种情况的适当解释。

在我的应用程序中,我使用 PHP/Apache 作为后端,Ben Alman's jQuery BBQ plugin 用于标签浏览器历史记录。用户登录仅由 PHP 服务器端使用来自登录页面的 POST 处理,并使用服务器端会话维护状态。我遇到的问题是,如果用户访问带有片段(哈希)的 URL 并且他们没有登录,他们将被重定向到 HTTPS 登录页面。除了 URL 包含片段散列之外,这在所有情况下都适用。从服务器端发起的任何重定向都会出现同样的情况。在这种情况下,不能使用 javascript 在重定向之前保留主题标签,因为页面加载在重定向之前永远不会完成。

我意识到片段会在重定向期间丢失(因为它只是客户端)并且服务器端永远不会看到,但是其他人如何处理这种情况并保留最初访问的 URL,以便用户可以结束登录或重定向后在正确的页面上?

任何建议表示赞赏。谢谢。

【问题讨论】:

  • $_SESSION 和 Ajax 浮现在脑海中?
  • 怎么办?重定向发生在任何 ajax 调用完成之前。

标签: php jquery redirect fragment-identifier jquery-bbq


【解决方案1】:

使用 JavaScript 使用片段填充隐藏的输入。

<input type="hidden" name="fragment" id="fragment">
<script>
if(window.location.hash){
    document.getElementById("#fragment").value=window.location.hash;
}
</script>

然后在后端,你可以这样重定向:

if(isset($_POST['fragment'])) {
    $fragment = '#'.$_POST['fragment'];
} else {
    $fragment = '';
}
header('Location: http://website/path'.$fragment);
exit;

您应该可能对片段进行urlencode。

【讨论】:

    猜你喜欢
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    • 2014-11-18
    • 2016-03-28
    相关资源
    最近更新 更多