2015-08-27 7 views
2

В попытке реализовать автоматический выход на стороне браузера после 30 секунд бездействия, мы думали о создании /heartbeat конечной точки:Пирамидальный стакан - есть ли способ создать конечную точку, которая не обновляет временную метку сеанса?

  • , когда пользователь перемещает мышь или типов любого ключа, Javascript обратного вызова запланирован после 10 секунд, чтобы позвонить PUT /heartbeat.
  • Если обратный вызов уже запланирован, предыдущий отменяется - это делается для того, чтобы избежать «лавины» PUT /heartbeat, когда пользователь набирает и/или перемещает мышь непрерывно (пока, например, записывает содержимое).
  • , то каждые 60 секунд выдается GET /heartbeat, который проверяет, сколько времени прошло с тех пор, как последний сеанс пользователя был обновлен. Мы можем это сделать, проверив содержимое таблицы сеанса стакана. Если прошло более 30 минут, конечная точка возвращает соответствующее указание на Javascript, поэтому пользователь автоматически выйдет из системы в браузере.

Это будет работать нормально, за одним небольшим исключением изъян - GET /heartbeat обновляет мензурку сессионный метку времени ...

Итак, вопрос - под Pyramid/Beaker, есть способ создания конечной точки что НЕ обновляет метку времени сеанса?

+0

* если обратный вызов уже запланирован, предыдущий отменяется * Таким образом, если пользователь что-то делает, вы никогда не услышите звук ... –

+0

@Piotr: Если пользователь что-то делает, тогда бэкэнд вызывается из-за его действия, поэтому его сеанс остается в живых. – ttsiodras

+0

* (...) это делается, чтобы избежать «лавины» «PUT/heartbeat», когда пользователь набирает и/или перемещает мышь непрерывно. * Вы действительно вызываете бэкэнд, когда пользователь просто печатает, не говоря уже о перемещении мыши? –

ответ

2

Что я сделал в итоге, я создал свой собственный BeakerSessionFactoryConfig, а также session_factory_from_settings (который создает BeakerSessionFactoryConfig).

Затем я изменил то, что вы можете увидеть здесь (вызов self.persist()) https://github.com/Pylons/pyramid_beaker/blob/6a62134bf99ff8d0836ccc0f6be557b816fa9987/pyramid_beaker/init.py#L32, чтобы быть условной операцией, основанной на том, что определенный атрибут установлен на объект запроса.

Это работает, поскольку до тех пор, пока .persists() не вызывается, временная метка «последний доступ» не обновляется в базе данных (или любом другом хранилище, которое вы используете).

 Смежные вопросы

  • Нет связанных вопросов^_^