正如您所说,在 url 上而不是在会话中传播数据。但是使用查询字符串 - 而不是路径,正如您在问题中所建议的那样。
没有神奇的方法可以做到这一点 - 您必须手动将变量附加到所有 url。但是,您可以将 url-creation 包装在一个函数中,以使其更易于管理。例如。:
$GLOBALS['url_state'] = array();
function url($base, $params = array()) {
global $url_state;
$q = http_build_query(array_merge((array) $url_state, $params));
return $q ? "$base?$q" : $base;
}
function define_url_state($name, $default = null) {
global $url_state;
if (isset($_GET[$name])) {
$url_state[$name] = $_GET[$name];
} elseif ($default !== null) {
$url_state[$name] = "$default";
}
}
如果您使用它在应用程序中构建所有 url,您现在可以轻松地使变量“粘性”。例如。在页面顶部,您可以像这样使用它:
define_url_state('page', 1);
在页面下方,您可以使用url()
. 然后,您将获得默认值 (1) 或用户传递给页面的$_GET
.