Pergunta

Na pirâmide, usando o copo para sessões, como posso torná -lo tão certas respostas não incluem cookies?

Atualmente, se eu enrolar algum URL no meu aplicativo, retribuirei algo como:

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

Não preciso que esse cookie seja definido com todas as solicitações. Por exemplo, eu gostaria de removê -lo das solicitações que têm o subdomínio "API". Eu tentei mudar:

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()

para:

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()

O que eu pensei que faria isso para que a fábrica da sessão não fosse definida nesses casos e, portanto, sem cookies. Não entendo o que está acontecendo com o middleware bem o suficiente. Eu também ficaria bem em descobrir uma maneira de torná -lo para que objetos de resposta que tenham um mimetype "Application/JSON" não incluam esse cookie. Qualquer ajuda seria muito apreciada.

Foi útil?

Solução

Uma maneira de fazer isso é usando um NewResponse assinante Isso modificaria a resposta de saída.

Por exemplo:

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']

Essa seria uma maneira de remover todos os cookies de todas as respostas. Outra maneira de fazer isso seria criar uma nova fábrica de sessão que verifique se o URL atual é uma solicitação da API e, se sim, ela não cria uma sessão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top