【问题标题】:Go back to calling website返回呼叫网站
【发布时间】:2011-07-13 20:11:04
【问题描述】:

在搜索(和测试)一种提供一种返回按钮的方法之后,我在这里提出这个问题(也许有一个简单的解决方案)。

我的网站上有关于定向运动的描述(5 页):http://www.uhebeisen.net/o-def/o-definition_ge.php

国外有很多网站都有这个页面的链接。现在,如果网上冲浪者正在进入我的页面,我想获取他们的 URL。然后我可以放置一个按钮返回到我的导航列表,让他回到他的页面,从那里他点击了指向我的描述页面的链接。

我已经看到使用 javascript:history.go(-1) 或 $_SERVER['HTTP_REFERER'] 和 PHP 的解决方案,但问题是网络冲浪者可以在我的页面中移动,如果完成他从任何页面的阅读,应该提供与他的(呼叫)网址,例如他的大学之一。

所以我需要获取他的 URL 并将其存储在安全的地方,直到他决定离开。如果他在浏览我的页面时返回到起始页面,他的 URL 不应该被覆盖。 由于我不编程 - 只需复制和粘贴并尝试了解会发生什么。欢迎就如何做到这一点提出任何建议。


谢谢乔治,那个有效 我不知道将 session_start 放在文件的最开头,这就是我收到两个警告的原因。 在测试这个函数时,我发现浏览器并不总是清除会话变量。尤其是 Firefox,它几乎永远保持调用 URL(WinXP、FF 5.x),而 Mac 上的 Firefox 5、Safari(Mac)和 Camino(Mac)按预期工作:重新启动程序后,我可以在另一个网站上成功测试.

Firefox 在会话方面的设置可能性是否与其他浏览器不同?

【问题讨论】:

  • 您似乎在回答自己的问题:将$_SERVER['HTTP_REFERER'] 存储在会话、cookie 或数据库中。

标签: php javascript firefox session-cookies


【解决方案1】:

您应该在到达时将 $_SERVER['HTTP_REFERER'] 存储在用户的会话中。使用此方法,当用户在您的网站内浏览时,该值不会被覆盖。

session_start();
if ( !isset( $_SESSION['referrer'] ) ) {
    if ( !empty( $_SERVER['HTTP_REFERER'] ) ) { // Because not all browsers set this
        $_SESSION['referrer'] = $_SERVER['HTTP_REFERER'];
    }
}

【讨论】:

  • 感谢您的回答乔治,我刚刚将该代码放在我的页面前面。现在我收到两个警告: 警告:session_start() [function.session-start]:无法发送会话 cookie - 标头已发送(输出开始于 /home/hebeisen/public_html/o-def/o-definition_ge.php: 1) 在 /home/hebeisen/public_html/o-def/o-definition_ge.php 第 3 行警告:session_start() [function.session-start]: 无法发送会话缓存限制器 - 标头已发送(输出开始于 /home /hebeisen/public_html/o-def/o-definition_ge.php:1) 在/home/hebeisen/public_html/o-def/o-definition_ge.php 第3行
  • 嗨,George,我使用了这个函数并将其放入我的 WordPress footer.php 中,该文件在整个域中呈现。我回显了$_SESSION['referrer'],当我在我的网站中浏览时,我看到 URL 正在发生变化。我可以更改或检查什么以将原始引荐来源网址保留在变量中?
【解决方案2】:

一种方法是将它们来自的页面存储在某个地方(可能在 cookie 或会话中,这对您的 PHP 页面很容易做到),但仅当该页面不在您网站的域中。这将需要一些 if 语句来适当地设置 cookie/会话值,但是使用引用变量的特定部分可以相对容易地完成。可能有一种更有效的方法来存储它,但这是一种立即跳到脑海中的方法。

编辑:我强烈推荐 George 的解决方案,这是更好的方法。

【讨论】:

    【解决方案3】:

    您是否尝试过使用会话?

    session_start();
    
    if( !isset($_SESSION['refer']) )
    {
        $_SESSION['refer'] = $_SERVER['HTTP_REFERER'];
    }
    

    然后,一旦您准备好制作按钮,请将链接设置为 $_SESSION['refer']。

    【讨论】:

      【解决方案4】:

      在我过去的项目中,我通常在这个过程之后存储重定向 url:

      1. 搜索查询字符串参数 url (www.yoursite.com/?redirect_url=my_encoded_url)
      2. 如果在第 1 点的搜索没有返回任何结果,那么我会检查 HTTP_REFERER

      在这两种情况下,我都会在验证 url 属于我的站点域后将该值存储在 SESSION 变量中。

      【讨论】: