如果设置了会话或 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,我们能够在我们的主平台上动态加载该经销商的徽标和样式表,而无需登录经销商的帐户(我们将应用程序出售给成千上万的经销商).这工作正常,但该应用程序有多个页面,如果我们要演示该应用程序,我们不想在每次打开新页面时都添加查询字符串。

所以我们的想法是在设置 $_GET['dealer'] 且不为空时设置 cookie 或会话,并使查询字符串在整个应用程序中持久存在,这样我们就不需要继续添加它演示期间的每一页。我们将为该 cookie/session 设置一个小时的过期时间。如果我们将空字符串传递给 'dealer' 查询,例如 ?dealer=.

,我们还将添加取消设置它们的功能

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

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

谢谢!

P.S。通过 $_SERVER 全局变量获取 URL、添加查询字符串并使用 header() 重定向可能无法正常工作,因为我必须将逻辑放在我的头文件中。任何加载的页面都需要重定向到自身但附加查询字符串,这将在重定向之上创建重定向。

您可以轻松地将其添加到会话中,将其放在页面顶部:

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

这将启动会话,并存储 dealer 变量(如果它在 quesrystring 中),它将对所有后续页面加载可用。根据您对字符串的处理方式,您可能希望将其转义或使用白名单。

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

另一种方法是设置 .htaccess 假设您使用的是 apache

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

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

不用的时候就评论一下

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