这个问题是关于后台办公室的数据列表,包括订单,页面数量,过滤器等变量。
我过去常常通过GET在页面之间传递这个变量,但我遇到了很多麻烦,并改为在会话中存储这些变量。我不介意书签问题,因为它是一个后台工具。一切都还可以,直到今天:我正在查看列表,我更改了一个过滤器,然后我想回到以前的结果。我的自然姿势是按下浏览器“后退”按钮。当然,我没有接受以前的结果,因为我已经覆盖了会话。
那么,这是最好的方法吗?不仅要考虑用户的体验,还要考虑编码设施并避免错误。
当我通过URL传递变量时,我发现了麻烦,特别是在两个或三个级别列表中:
我认为最好的解决方案不是“嘿,如果你多注意,你就不会犯这些错误”。有没有我尚未发现的系统?伟大的人是如何做到的?
也许实现自动渲染链接的方法?
感谢。
答案 0 :(得分:1)
这些类型的变量的位置是查询字符串。不仅需要书签,而且通常需要导航到给定的内容,就像您使用后退按钮发现的那样。但是,如果您确实要缩写查询字符串,请考虑使用标记或标识符。
也就是说,在会话中,请考虑使用这样的系统:
// this represents the query data for one page request
$_SESSION['queryid']['38hghfd85423lk'] = array(
'all' => array('the => 'query', 'data'),
'is' => array('stored', 'like', 'this)
);
// this represents the query data for another page request
$_SESSION['queryid']['432423jkgrfsd9'] = array(
// .... other data ....
);
现在您的查询字符串将如下所示:
http://www.example.com/index.php?queryid=38hghfd85423lk
或者像这样:
http://www.example.com/index.php?queryid=432423jkgrfsd9
当然,您使用GET数据中给出的queryid来标识要从$_SESSION
使用的查询数据。现在浏览器后退按钮将起作用。
问题可能是,在长时间会话之后,$_SESSION
中的查询缓存将变得非常大。要缓解这种情况,您可以限制缓存的长度,比如最后100页。如果用户尝试返回超过100页,您会注意到他们的queryid不再存在,并且能够通知他们页面已过期。
如果要支持书签,可以将queryid和数据保存到数据库中。当然,您可能仍需要考虑修剪方法 - 例如,清除一个月未使用的查询。然而,这对用户来说可能是令人沮丧的。