在 PHP 重定向期间处理片段标识符
Posted
技术标签:
【中文标题】在 PHP 重定向期间处理片段标识符【英文标题】:Handling fragment identifiers during PHP redirects 【发布时间】: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 调用完成之前。
【参考方案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。
【讨论】:
以上是关于在 PHP 重定向期间处理片段标识符的主要内容,如果未能解决你的问题,请参考以下文章