重定向用户及其如何影响后退按钮的使用


Redirecting users and how it affects useage of the back button

我一直想知道,假设用户从URL开始:

http://www.foo.com/

然后他们点击一个链接,让他们说:

http://www.foo.com/some-page.php

但是在这个脚本中,你这样做:

header('Location: http://www.foo.com/another-age.php');

现在,如果用户在浏览器中按下后退按钮会发生什么?它们是发送回http://www.foo.com/some-page.php然后再次重定向到http://www.foo.com/another-age.php使后退按钮无用,还是重定向回http://www.foo.com/

我知道我可以对此进行测试,但我认为某些浏览器的行为可能有所不同,并想知道它应该如何工作?

这完全取决于您以及如何在代码中使用:header() 用于发送原始 HTTP 标头(有关详细信息,请转到 http://php.net/manual/en/function.header.php)。当我想将用户重定向到我的 Web 应用程序中的特定页面时(在用户完成特定功能后),我会使用它。

根据我的知识,使用 header(),如果没有几秒钟的重定向,浏览器不会启用后屁股。

秒示例:

header( "refresh:5;url=http://stackoverflow.com" );
header( "refresh:5;url=wherever.php" );

以其他形式使用,就像你说的,如果点击链接,请转到: http://www.foo.com/some-page.php 使用 heades(),这意味着链接转到 Wharever.php其标题代码指向某个页面.php。有了这个,后臀部将始终可用。另一种使用方法是使用 if 或调用特定函数。

另一方面,如果您不希望在任何用于导航网页的浏览器中保存缓存或解释如何工作和如何禁用,这里有一篇很好的帖子(在不同的脚本语言中都有示例):如何控制网页缓存,跨所有浏览器?

head() PHP 示例:

header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP 1.1.
header("Pragma: no-cache"); // HTTP 1.0.
header("Expires: 0"); // Proxies.

W3C的一篇题为"使用标准重定向:不要破坏后退按钮!"的帖子显然是这样说的:除非重定向来自"刷新"技术(相反,HTTP重定向),否则浏览器不会捕获重定向器

引用那篇关于HTTP重定向的文章

另一方面,"HTTP重定向"的作用要直接得多,因为它是在另一层内完成的。当用户代理(即浏览器或验证器)首先联系服务器并请求文档时,服务器本身已配置为将文档重定向到另一个地址,并回复用户代理它应该查看新地址。

这具体说明/some-page.php被移到了/another-page.php(我有点认为它们也可以说是"相同的")。从那时起,根据问题,浏览器后退按钮将直接转到foo.com

关于此功能

header('Location: http://www.foo.com/another-page.php');

它使用Location标题,您可以从此处的规范中阅读有关它的信息。

<小时 />

至于测试,您可以尝试任何URL缩短器,例如 goo.gl。它实现 301 重定向。使用浏览器后退按钮访问 URL 后,您将无法获得缩短的 URL。或者只是转到 fb.com,您将被重定向到 facebook.com 并且肯定不会返回到以前的URL(如果您实际上没有隐藏它,域屏蔽有什么意义?

来自维基百科的说明,将重定向器推送到浏览器历史记录的另一种方法是使用 JavaScript

window.location='http://www.example.com/'

如果您想在浏览器中尝试,以下脚本将创建三个您可以使用的文件。

<?php
$dir = '/tmp/';
foreach(
    array(
        'foo.php' => '<a href="bar.php">Go to bar.</a>',
        'bar.php' => '<?php header("Location: baz.php");',
        'baz.php' => '<h1>Hello I''m Baz</h1>'
    )
    as $name => $contents
) {
    file_put_contents($dir . $name, $contents);
}

拥有三个文件后,将位置放在可访问Web的位置。要使用打开 foo.php然后单击链接。

在Chrome 46中,从baz.php(重定向后)回击,将我带回foo.php。

在 Firefox Nightly 50 和 Opera 12 中,同上。

这将精确重定向到您在标头函数中定义的路径,该路径 http://www.foo.com/another-age.php。您也可以将其重定向到主页,也可以使用后退按钮访问路径。

这将使后退按钮无用。它会将它们重定向回"http://www.foo.com/another-age.php"

(至少以我的简单经验)