#pyramid Выход из системы не может удалить сеанс, если загружается другая страница - PullRequest
0 голосов
/ 31 января 2019

Мой веб-сайт использует пирамиду и включает pyramid_beaker, чтобы использовать сессию для оценки того, клиент уже вошел в систему или нет.
Теперь я сталкиваюсь с проблемой: я вхожу в систему на одной веб-странице и открываю новую вкладку, если я выхожу на первой странице (она отображается перенаправленной на страницу входа успешно) до того, как вторая страница загрузит все, затем обновляет две страницы, обевойти в систему, полностью отличается от того, что я ожидаю.Я думал, что обе две страницы должны выйти из системы

мой код выглядит так:

   @view_defaults(route_name='/')
   class client:
       def __init__(self, request)
           self.rq = request
           if self.rq.session.get("loginfo", {}).get("logged") == "1":
               # logged, do something
           else:
               # not logged, raise Httpfound

       @view_config(...)
       def login(self):
           self.rq.session["loginfo"] = {"logged": "1"}

       @view_config(...)
       def logout(self)
           if "loginfo" in self.rq.session:
               del self.rq.session["loginfo"]

конфигурация в ini

session.type = memory
session.key = mykey
session.secret = mysecret
session.data_dir = %(here)s/data/sessions/data
session.lock_dir = %(here)s/data/sessions/lock
session.timeout = 7200

Если я работаю медленнее, просто подождите, пока загрузится вторая страницазавершено, затем выход из системы, обе страницы становятся выходом из системы
Я полностью сбит с толку, почему вторая страница будет влиять на очистку loginfo от сеанса?

1 Ответ

0 голосов
/ 01 февраля 2019

Сеансы - это блок данных, которые обновляются «все или ничего».Вероятно, происходит следующее:

s0 = original session with login info
request1.session = copy(s0) and set logout
request2.session = copy(s0) and do other things
save request1.session
save request2.session

Конечный результат - request2.session, для которого не установлен выход из системы.

Условия гонки - это известная проблема в сеансах, и это просто факт жизни, если тольковы принимаете дополнительные меры предосторожности, такие как блокировка, но в большинстве случаев это не стоит.

...