【问题标题】:Session Problem with multiple Tabs多个选项卡的会话问题
【发布时间】:2011-07-13 22:13:51
【问题描述】:

我在我的页面上进行了搜索,其中有一个过滤菜单、一个排序选项和一个页面浏览器。客户希望,如果他搜索某些内容并单击产品,然后再次单击“返回”或“搜索”,那么相同的搜索和结果会再次显示。

我不想通过每个链接(错误的 url)传递所有搜索参数,所以我将所有这些数据存储在会话中。这工作正常,但有一个问题:

用户打开搜索并按“size=big”过滤,然后打开一个新标签并将过滤器更改为“size=small”。现在他的会话中有“size=small”。因此,如果他切换回第一个选项卡并在此处单击“第 2 页”,那么他会看到第二页,但不是他预期的“size=big”,而是“size=small”。

有没有一种很好的方法来解决这个问题而无需一直传递所有变量(很多!)?

【问题讨论】:

  • 你如何定义“坏网址”?通常将这些参数放入 url 会更舒服,因为这样可以为链接添加书签或通过电子邮件发送。
  • +1 到 KingCrunch。如果你按照你建议的方式去做,你会给自己带来更多的问题。
  • 这个链接现在非常好,比如:www.x.y/category/product/,所有的东西都更像/category/product/search1/value1/search2/value2/page/sorting其中可能有多达 11 个不同的搜索参数。即使在主菜单链接中,这也必须无处不在,并且这些链接必须在 ajax 事件上发生变化.. 我认为这不是一个很好的解决方案
  • 我同意 KingCrunch 的观点,“www.x.y/category/product/”比将搜索参数放入链接要糟糕得多,因为无法“存储”搜索结果以供以后使用。在浏览页面时保留所有参数似乎不是一个好主意。我现在正在开发一个系统,我将搜索参数存储在会话中 - 它带来的混乱多于便利,因此我不得不切换到通过 URL 传递参数。至于更改 ajax 事件的 URL,谷歌通过在 # 字符之后的 URL 中添加变量来解决这个问题。
  • 如果你有一个特定的用户群,你可以控制他们使用的浏览器,你也可以使用 HTML5 历史 API。 Github 做到了。

标签: php session


【解决方案1】:

我强烈建议将搜索放在您的链接中。它可能会使您的链接不那么“漂亮”,但我讨厌它无法通过简单地发送链接将搜索结果发送给朋友。

但要回答您的问题:在每个表单中添加一个 search_id,它会附加到 url。然后在会话中保存对特定search_id 的搜索。当用户刷新页面时,您可以检查是否传输了 POST 搜索变量,或者会话中是否存储了该特定 search_id 的变量。

【讨论】:

  • 如果您更改搜索,结果将使用 ajax 重新加载,因此您永远不会以用户身份看到搜索 url。 (但可以在某个地方向他展示)我也想过这样的想法,但是我怎么知道何时创建一个新的 searchid。我不知道用户是否更改了搜索或打开了新标签,因此希望创建新搜索?我当然可以为新搜索添加一个按钮,但人们可能会忽略它并更改值以更改他们的搜索(特别是如果设置了许多变量并且他们只想更改一个)
  • @Flo,关于“我如何知道何时创建新的 searchid” - 您可能会在 每个 搜索时创建新的搜索 ID。例如,您有搜索 #1,您在另一个选项卡中打开它 - 现在您有两个 #1 搜索。您在第一个选项卡中执行搜索 - 搜索 #1 被替换为 #2,但您在第二个选项卡中仍然有 #1。当在第二个选项卡中执行另一个搜索时,搜索 ID 从 #1 更改为 #3(因为 #2 已经在第一个选项卡中)。这样,在执行新搜索时,您可以从“先前”搜索中获取搜索参数,因为您拥有在该确切选项卡中执行的搜索 ID。
【解决方案2】:

没有。现在,浏览器在所有选项卡上都实现了 cookie,因此您不能在不同的选项卡上拥有不同的 cookie 或会话。因此,存储状态的唯一方法是在 url 上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-10
    • 2015-06-29
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 2012-10-18
    • 2011-02-19
    • 2018-07-05
    相关资源
    最近更新 更多