разные значения переменной сеанса django на разных вкладках

Рассмотрим следующий сценарий:

  1. Пользователь что-то ищет, и создается список (request.session['List'])
  2. Пользователь может отфильтровать этот список с помощью вызова ajax.
  3. Теперь пользователь открывает новую вкладку, выполняет еще один поиск, поэтому теперь для переменной сеанса List устанавливается новый список для другого поиска.
  4. Пользователь возвращается к первой вкладке и снова фильтрует результаты. На этот раз результаты фильтрации поступают из нового списка на другой вкладке, поскольку переменная сеанса изменилась.

Есть ли способ установить разные значения переменной сеанса для разных вкладок? или любое другое решение этой проблемы?


person user_2000    schedule 14.06.2013    source источник


Ответы (2)


Нет простого способа сделать это, и это не специфично для Django. Проверьте этот вопрос:

Как различать сеансы во вкладках браузера?.

Сессия, основанная на куки, определенно не будет работать, поскольку куки являются общими для вкладок для определенного сайта. Решения на основе URL-адресов с сеансом или локальным хранилищем имеют свои проблемы, и в целом это не очень хорошая идея, поскольку добавляет сложности, которые в большинстве случаев не требуются.

В вашем случае, почему бы вам не сохранить список как данные JavaScript или локальное хранилище? В этом случае каждая вкладка имеет свои данные.

person maulik13    schedule 14.06.2013
comment
Спасибо, я использую django-бесконечную нумерацию страниц, и когда вы прокручиваете вниз, каждый раз, когда загружается страница, запрос ajax отправляется на серверную часть, и результаты извлекаются, не думаю, что нумерация страниц будет работать, если я сохраню ее как Данные JS, есть другие идеи, как заставить его работать? - person user_2000; 14.06.2013
comment
Да, если вы снова загружаете страницу, данные JS не будут работать. Я предполагал, что вы выполняете только загрузку данных AJAX. Есть ли у вас возможность использовать локальное хранилище? - person maulik13; 14.06.2013

Серверное приложение идентифицирует ваши запросы и сеанс по вашему идентификатору сеанса, это означает, что оно не знает о вкладках и тому подобном. На самом деле, если вы дадите мне свой идентификатор сеанса, я получу тот же список (см. Перехват сеанса, чтобы не попасть в такие неприятности).

При этом, если вы действительно хотите это сделать, вы можете поиграть с сохранением пользовательского агента в своем сеансе или использовать request.is_ajax()

Вы могли бы иметь session['List'] = ... и session['List_ajax'] = ...` Тогда вы должны сделать: return session['List_ajax'] if request.is_ajax() else sessoion['List']

person Ciprian Tarta    schedule 14.06.2013
comment
спасибо, но я не совсем понял ваше решение, так как я по сути создаю один и тот же тип списка (с разным содержимым), как я могу отправить обычный запрос с одной вкладки и запрос ajax с другой? - person user_2000; 14.06.2013
comment
Насколько я понял, поиск не будет вызовом ajax, а только фильтрацией после возврата списка. Если это не так, то см. ниже - person Ciprian Tarta; 14.06.2013