在我使用过的旧 Web 开发平台中(几年前),这是使用内置函数解决的。这个想法是服务器维护某种内部 url 集合并将它们映射到简单的数字。当您向集合中添加新的 url 时,服务器将首先检查该确切的 url 是否已经存在,如果存在则返回关联的数字。如果您添加的 url 是新的,它将被添加并返回一个新的数字。
几个示例来说明......让我们假设用户从页面开始:
http://foo.bar.com/search/
我将此页面称为“第 1 页”。添加搜索条件后,用户将在页面上看到结果:
http://foo.bar.com/search/results?jobTitle=CEO&etc&etc
我将其称为“第 2 页”。在此页面上,用户可以单击打开特定结果并进入页面:
http://foo.bar.com/search/results/12313
我将其称为“第 3 页”。
要使第 2 页和第 3 页具有“返回上一页”功能,需要使用一个额外的查询参数打开它们。当第 1 页生成第 2 页的 url 时,服务器将调用实用程序方法SaveUrl()
(在某个合适的类上)并将结果附加到查询字符串,因此第 2 页的 url 变为:
http://foo.bar.com/search/results?jobTitle=CEO&etc&etc&return_url=1
注意新的return_url=1
查询参数。然后页面 2 将使用相应的GetReturnUrl(1)
方法来获取要在“返回上一个”链接中使用的 url。此调用将带回之前添加的 url,即http://foo.bar.com/search/
.
从第 2 页前进到第 3 页还需要使用相同的SaveUrl()
. 第 3 页的新 url 将是:
http://foo.bar.com/search/results/12313?return_url=2
在第 3 页上,将使用 获取“返回上一个”页面 url GetReturnUrl(2)
,这将返回http://foo.bar.com/search/results?jobTitle=CEO&etc&etc&return_url=1
。
因此,该系统通过存储当前页面的 url 并将其在 url 中提供给下一页来工作。并且由于当前页面的 url 以查询参数的形式包含对当前页面的上一页的引用,因此保留了返回上一页的路径。
我想我会解释这一点,因为我认为这是处理回到上一个线索的聪明方法。我并不是说这是任何行业标准或最佳实践......
编辑:关于这种方法的一些想法和考虑。
优点:
- 存储和检索 url 的简单方法,不会导致更长的查询字符串
缺点:
- 只要 url 包含返回所需的所有必要状态,就可以工作。
- 根据实现细节(全局 url 集合?会话中的用户特定 url 集合?保留在 Sql 服务器中?)它可能会导致 Web 场中的问题(所有服务器需要就存储为“1”的 url 达成一致)。
- 可能会导致高流量站点的内存问题(但这也取决于具体的实现)