【问题标题】:If session or cookie is set, append query string to URLs across the whole domain如果设置了会话或 cookie,则将查询字符串附加到整个域中的 URL
【发布时间】:2015-09-10 12:49:15
【问题描述】:

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

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

因此,我们的想法是在设置 $_GET['dealer'] 且不为空时设置 cookie 或会话,并使查询字符串在整个应用程序中保持不变,因此我们无需在运行期间为每个页面都添加它演示。我们将为该 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() 重定向可能不起作用,因为我必须将逻辑放在头文件中。任何加载的页面都需要重定向到自身,但附加一个查询字符串,这将在重定向之上创建重定向。

【问题讨论】:

  • 如果你设置了一个cookie,为什么不从cookie而不是从URL中读取呢?
  • 是的,基本上是@JasonMcCreary 建议的。如果您将其存储在 cookie 或会话中,只需忽略 URL,并使用其中的值。像这样的东西(对于会话)if(isset($_SESSION['dealer_name']) { $dealer = $_SESSION['dealer_name']; } else { $dealer = $_GET['dealer']; }
  • @AlexSzabó 这就是我正在做的,但我如何使用$dealer 使经销商的信息持久化?将它放在所有页面上将是很多工作。我想知道还有另一种方法。

标签: php session url cookies query-string


【解决方案1】:

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

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

这将启动会话,如果经销商变量在查询字符串中,则将其存储,并且它将可用于所有后续页面加载。根据您对字符串所做的操作,您可能希望将其转义或使用白名单。

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

【讨论】:

  • 那么如何使用$_SESSION['dealer'] 在每一页加载经销商信息呢,zedd?
  • 像使用 $_GET['dealer'] 一样使用它(只要你使用 session_start(),你就可以访问上一页加载时设置的变量)
  • 工作就像一个魅力!谢谢。
  • @GabrielFerraz 很高兴它起作用了,现在请注意,如果您从数据库中获取它以防止恶意使用,您需要正确地对其进行转义/参数化
  • 我们只是测试该名称是否在我们的brands.csv 上,然后我们有一个逻辑来处理从数据库中提取经销商的信息。从查询字符串中获取的经销商名称永远不会用于执行数据库插入、选择或更新。不过,我正在逃避它,这也是一种很好的做法。再次感谢。
【解决方案2】:

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

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

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

不使用的时候,评论一下

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

【讨论】:

  • 我怎样才能让“the_dealer_name '动态',病毒?我们需要能够即时更改它。
  • 不,我不知道,你需要每次更新.htaccess
猜你喜欢
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
  • 2019-02-10
  • 1970-01-01
  • 2011-10-27
  • 2011-12-13
  • 1970-01-01
相关资源
最近更新 更多