【问题标题】:Redirecting users and how it affects useage of the back button重定向用户以及它如何影响后退按钮的使用
【发布时间】:2016-11-07 04:23:29
【问题描述】:

我只是想知道,假设用户从 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/

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

【问题讨论】:

  • @Progrock 你没看我问题的最后一句话吗? :)
  • @Brett 你在考虑 php 重定向还是任何重定向
  • @KishanKumar PHP 重定向。 :)

标签: php redirect http-headers http-redirect


【解决方案1】:

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

据我所知,使用 header(),如果没有几秒钟的重定向,浏览器不会启用后退按钮。

秒数示例:

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

header( "refresh:5;url=wherever.php" );

以其他形式使用,就像你说的,如果点击链接去: http://www.foo.com/some-page.php 使用heades(),这意味着链接去wharever.php 有去some-page.php 的标题代码。这样,后按钮将始终可用。其他使用方式是使用 if 或调用特定函数。

另一方面,如果您不希望任何用于浏览网页的浏览器中的保存缓存或解释如何工作和如何禁用,这里有一篇很好的帖子(有不同脚本语言的示例): How to control web page caching, across all browsers?

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.

【讨论】:

    【解决方案2】:

    来自 W3C 的一篇名为 Use standard redirects: don't break the back button! 的帖子显然是这样说的:除非重定向来自“刷新”技术(与 HTTP 重定向相反),否则浏览器不会捕获重定向器

    引用那篇关于 HTTP 重定向的帖子

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

    专门告诉/some-page.php 的内容已移至/another-page.php(我有点认为它们也可以说是“相同的”)。从那时起,根据问题,浏览器后退按钮将直接转到foo.com

    关于这个功能

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

    它使用Location 标头,您可以从规范here 中了解它。


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

    来自Wikipedia 的注释,将重定向器推送到浏览器历史记录的另一种方法是通过 JavaScript

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

    【讨论】:

    • 感谢您的精彩帖子。这正是我想要的 - 谢谢!
    【解决方案3】:

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

    <?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);
    }
    

    获得三个文件后,将其放置在可通过网络访问的位置。使用打开 foo.php 并点击链接。

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

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

    【讨论】:

    • 感谢您运行这些测试 - 我想我只是想知道这是否是标准行为,因此是我的问题,而不是我自己运行这样的测试:)
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

      (至少以我的简单经验)

      【讨论】:

        猜你喜欢
        • 2015-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-08
        • 2014-12-14
        • 2020-04-16
        • 1970-01-01
        • 2015-09-08
        相关资源
        最近更新 更多