如果设置了session或cookie,则将查询字符串附加到整个域的url


If session or cookie is set, append query string to URLs across the whole domain

我们有一个使用动态品牌的PHP应用,所以如果我们插入查询字符串

?dealer=the_dealer_name&dealer=the_dealer_name,我们能够在我们的主平台上动态加载经销商的徽标和样式表,而无需登录经销商的帐户(我们将应用程序销售给成千上万的经销商)。这工作得很好,但应用程序有几个页面,如果我们正在演示应用程序,我们不希望每次打开一个新页面时都添加查询字符串。

所以我们的想法是设置cookie或会话时,$_GET['dealer']是设置的,而不是空的,并使查询字符串在整个应用程序中持久,所以我们不需要在演示期间为每个页面添加它。我们将为该cookie/会话设置一个一小时的过期时间。如果我们将一个空字符串传递给"经销商"查询(如?dealer=),我们还将添加取消设置它们的能力。

我想知道是否有任何方法可以将?dealer=the_dealer_name/&dealer=the_dealer_name查询字符串添加到第一次设置后的url,并使其作为url的最后一个查询字符串持续存在,直到cookie/会话过期。

总而言之,一旦我们将查询字符串?dealer=the_dealer_name&dealer=the_dealer_name传递给URL,网站上的所有URL路径都将附加该查询字符串,除非我们传递一个空字符串作为参数并取消设置cookie/会话,或者cookie/会话过期。

谢谢!

注:通过$_SERVER全局变量获取URL,添加查询字符串,并使用header()重定向可能不起作用,因为我必须将逻辑放在我的头文件中。任何加载的页面都需要重定向到自己,但要加上一个附加的查询字符串,这将在重定向的基础上创建重定向。

你可以很容易地把它添加到会话中,把它放在你的页面顶部:

session_start();
if (isset($_GET['dealer'])) $_SESSION['dealer'] = $_GET['dealer'];
//then get the $_SESSION['dealer'] on all pages

这将启动会话,并存储经销商变量(如果它在查询字符串中),并且它将对所有后续页面加载可用。根据您对字符串的处理,您可能想要转义它或使用白名单。

如果您想删除会话(并带走品牌),您可以运行session_destroy();

另一种方法是在使用apache的前提下设置.htaccess

在请求页面时附加特定的查询字符串

RewriteRule ^([^?]*)$ ?dealer=the_dealer_name [L,QSA,NC]

不使用时,注释

# RewriteRule ^([^?]*)$ ?dealer=the_dealer_name [L,QSA,NC]