Web2py отключить сеансовые куки для каждого контроллера - PullRequest
0 голосов
/ 09 мая 2018

Есть ли способ не сохранять идентификаторы сеанса и cookie сеанса в web2py на уровне контроллера? global_settings.web2py_disable_session = True сделает это для всего сайта, но я хочу, чтобы некоторые страницы сохраняли сессии.

1 Ответ

0 голосов
/ 09 мая 2018

Если вам не нужно использовать систему перезаписи на основе параметров, вы можете отключить сеансы на основе маршрутизации, используя систему перезаписи на основе шаблона. В файле routes.py вы должны сделать что-то вроде этого:

routes_in = [
    ('/myapp/default/$anything', '/myapp/default/$anything', 
     dict(web2py_disable_session=True))
]

Необязательный третий элемент кортежа routes_in - это словарь, который будет использоваться для обновления request.env. Выше будет добавлено web2py_disable_session=True к request.env только для маршрутов, начинающихся с /myapp/default/ (установка global_settings.web2py_disable_session=True, с другой стороны, добавит web2py_disable_session=True к request.env для всех запросов).

Кроме того, вы можете просто вызвать session.forget(response) в любом контроллере или действии, которое не требует сеанса (или условно в файле модели в зависимости от запрошенного пути). Если сессионный cookie или файл еще не созданы, это предотвратит их создание. Хотя этот метод проще, он немного менее эффективен, чем описанный выше, поскольку он все равно будет приводить к запуску кода инициализации сеанса при каждом запросе.

Последний вариант - создание пользовательской прикладной функции WSGI в файле обработчика WSGI, которая условно добавляет web2py_disable_session=True в словарь среды WSGI в зависимости от запрошенного маршрута. Затем передайте словарь измененной среды в gluon.main.wsgibase.

...