2

考虑以下场景:

  1. 用户搜索某事并创建一个列表 (request.session['List'])
  2. 用户可以通过 ajax 调用过滤此列表
  3. 现在用户打开一个新选项卡,进行另一个搜索,所以现在会话变量 List 设置为另一个搜索的新列表
  4. 用户返回第一个选项卡并再次过滤结果。这一次,过滤结果来自另一个选项卡中的新列表,因为会话变量已更改

有没有办法为不同选项卡的会话变量设置不同的值?或任何其他解决此问题的方法?

4

2 回答 2

1

没有简单的方法可以做到这一点,而且它不是 Django 特定的。检查这个问题:

如何在浏览器选项卡中区分会话?.

基于 cookie 的会话肯定不会起作用,因为 cookie 在特定站点的选项卡之间很常见。基于具有会话或本地存储的 URL 的解决方案有其自身的问题,通常这不是一个好主意,因为它增加了在大多数情况下不需要的复杂性。

在您的情况下,为什么不将列表存储为 JavaScript 数据或本地存储?在这种情况下,每个选项卡都有自己的数据。

于 2013-06-14T08:35:47.627 回答
0

服务器应用程序通过您的会话 ID 识别您的请求和会话,这意味着它不知道选项卡等。事实上,如果你给我你的会话 ID,我会得到相同的列表(请参阅会话劫持,以免陷入此类麻烦)。

话虽这么说,如果你真的想这样做,你可以尝试将用户代理保存到你的会话中,或者使用request.is_ajax()

你可以有session['List'] = ...and session['List_ajax'] = ...` 然后你应该这样做: return session['List_ajax'] if request.is_ajax() else sessoion['List']

于 2013-06-14T07:46:24.827 回答