在PHP重定向期间处理片段标识符



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

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

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

如有任何建议,不胜感激。谢谢

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

您应该可能对片段进行url编码。

最新更新