피라미드에서 쿠키가 특정 응답으로 설정되는 것을 방지 할 수있는 방법은 무엇입니까?

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

문제

피라미드에서는 세션에 비이커를 사용하여 특정 응답에 쿠키가 포함되지 않도록 어떻게 만들 수 있습니까?

현재 내 앱에서 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

모든 요청으로 쿠키가 설정 될 필요는 없습니다. 예를 들어 하위 도메인 "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()

세션 공장이 그러한 경우에 설정되지 않도록 쿠키가 없도록 만들 것이라고 생각했습니다. 나는 미들웨어로 무슨 일이 일어나고 있는지 이해하지 못한다. 또한 "Application/JSON"MIMETYPE가있는 응답 객체에 해당 쿠키가 포함되지 않는 응답 객체를 만드는 방법을 알아내는 것도 괜찮습니다. 어떤 도움이든 큰 감사를드립니다.

도움이 되었습니까?

해결책

이것을 할 수있는 한 가지 방법은 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']

이것은 모든 응답에서 모든 쿠키를 제거하는 한 가지 방법입니다. 이를 수행하는 또 다른 방법은 현재 URL이 API 요청인지 확인하는 새로운 세션 공장을 작성하는 것입니다. 그렇다면 세션을 전혀 생성하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top