В Pyramid, как можно предотвратить установку файлов cookie в определенных ответах?

StackOverflow https://stackoverflow.com/questions/19827390

Вопрос

В Pyramid, используя beaker для сеансов, как я могу сделать так, чтобы определенные ответы не включали файлы cookie?

В настоящее время, если я скручу любой URL-адрес в своем приложении, я получу обратно что-то вроде:

HTTP/1.1 200 OK
Server: nginx/1.2.6
Date: Thu, 07 Nov 2013 02:14:45 GMT
Content-Type: application/json; charset=UTF-8
Content-Length: 776
Connection: keep-alive
Set-Cookie: beaker.session.id=0a6d945c09884ca29d73bc4ff4d09ff0; expires=Thu, 07-Nov-2013 03:14:45 GMT; httponly; Path=/; secure

Мне не нужно, чтобы этот файл cookie устанавливался вместе со всеми запросами.Например, я хотел бы удалить его из запросов, которые имеют поддомен "api".Я пытался измениться:

def main(global_config, **settings):
    session_factory = session_factory_from_settings(settings)
    config = Configurator(settings=settings, root_factory=get_root)
    config.set_session_factory(session_factory)
    return config.make_wsgi_app()

Для:

def main(global_config, **settings):
    session_factory = session_factory_from_settings(settings)
    config = Configurator(settings=settings, root_factory=get_root)
    #config.set_session_factory(session_factory)
    return MethodOverride(config, session_factory)

class MethodOverride(object):

    def __init__(self, config, session_factory):
        import copy
        self.config = copy.deepcopy(config)
        config.set_session_factory(session_factory)
        self.application = config.make_wsgi_app()

    def __call__(self, environ, start_response):
        if "api" == environ['HTTP_HOST'].split('.')[0]:
            self.application = self.config.make_wsgi_app()

Который, как я думал, сделает так, что фабрика сеансов не будет установлена в этих экземплярах и, следовательно, никаких файлов cookie.Я недостаточно хорошо понимаю, что происходит с промежуточным программным обеспечением.Я также был бы не против найти способ сделать так, чтобы объекты ответа, которые имеют mimetype "application / json", не включали этот файл cookie.Мы были бы очень признательны за любую помощь.

Это было полезно?

Решение

Один из способов, которым вы могли бы это сделать, - это использовать NewResponse подписчик это изменило бы исходящий ответ.

Например:

def new_response_subscriber(event):
    request = event.request
    response = event.response

    if "api" == request.environ['HTTP_HOST'].split('.')[0]:
        if 'Set-Cookie' in response.headers:
            del response.headers['Set-Cookie']

Это был бы один из способов удалить все файлы cookie из всех ответов.Другим способом сделать это было бы создать новую фабрику сеансов, которая проверяет, является ли текущий URL-адрес запросом API, и если да, то она вообще не создает сеанс.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top