不同选项卡中django会话变量的不同值

时间:2013-06-14 07:28:47

标签: django django-sessions

考虑以下情况:

  1. 用户搜索内容和列表(request.session ['List'])已创建
  2. 用户可以通过ajax调用
  3. 过滤此列表
  4. 现在用户打开一个新标签,进行另一次搜索,所以现在会话变量List被设置为另一个搜索的新列表
  5. 用户返回第一个标签并再次过滤结果。这次,当会话变量发生变化时,过滤结果来自另一个选项卡中的新列表
  6. 有没有办法为不同的标签设置会话变量的不同值?或者针对这个问题的任何其他解决方案?

2 个答案:

答案 0 :(得分:1)

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

How to differ sessions in browser-tabs?

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

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

答案 1 :(得分:0)

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

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

您可以session['List'] = ...session ['List_ajax'] = ...` 然后你应该这样做:     如果request.is_ajax()else sessoion ['List']

,则返回会话['List_ajax']