从引用者创建会话

时间:2011-08-08 14:45:59

标签: php mysql session

背景:我有一个网站,我们称之为AwesomeSite.com;它处理我的所有流量。此外,为了营销的目的,我有第二个域名,我们称之为PromoForAwesomeSite.com;它将所有流量直接重定向到AwesomeSite。这两个站点都是使用PHP,MySQL和Apache构建的。

问题:我想根据用户访问我的网站的方式向用户提供不同的内容。具体来说,如果用户从PromoForAwesomeSite重定向,我想展示促销。

问题:如何检测用户是否来自PromoForAwesomeSite,从而为他们创建不同的会话状态?

P.S。我很清楚这种方法的缺点,因为一旦会话cookie被删除,促销用户就无法看到促销内容,除非他们重新访问重定向网站(不太可能)。不幸的是,这无济于事。

2 个答案:

答案 0 :(得分:3)

您可以使用$_SERVER['HTTP_REFERER']并查看引荐来源字符串中是否包含PromoForAwesomeSite.com。比如像这样:

session_start();

if(substr_count($_SERVER['HTTP_REFERER'] , 'PromoForAwesomeSite.com')){
    $_SESSION['from_promo'] = 1;
}

由于浏览器可以阻止引用者,因此您可能会考虑从促销网站的重定向字符串中发送GET参数的可能性。不知道你是如何从促销网站重定向,但如果你的PHP可以做这样的事情,如果没有你会明白我的意思:))

HEADER('Location: http://AwesomeSite.com/index.php?from=promo');

因此,您可以检查此字符串并保存在会话中,而不是(或另外)检查引荐来源。

答案 1 :(得分:1)

在您的情况下,如果您在登陆时进行自动重定向,则不会继续推荐人。因此,如果我是你,我会像这样处理它:

<强> 1。在 PromoForAwesomeSite.com

header('Location: http://www.awesomesite.com/promo.php');

<强> 2。在 AwesomeSite.com

一个。创建promo.php网关页面

湾在网关页面

setcookie('Promo', '1', time()+(5 * (24 * 3600))); // five days promotion cookie - adjust it
header('Location: http://www.awesomesite.com/index.php');

℃。在index.php

if($_COOKIE['Promo']){
    // show promotion
}

通过这种方式,您也可以解决会话问题。