1

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

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

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

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

4

1 回答 1

0

使用 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。

于 2018-06-27T02:01:17.087 回答