Frage

Wie kann ich in der Pyramide, die Becher für Sitzungen verwenden, es so darstellen, dass bestimmte Antworten keine Kekse enthalten?

Wenn ich derzeit eine URL in meiner App kräuselte, bekomme ich so etwas wie:

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

Ich brauche nicht, dass das Cookie mit allen Anfragen festgelegt wird. Zum Beispiel möchte ich es aus Anfragen entfernen, die die Subdomain "API" haben. Ich habe versucht zu ändern:

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

zu:

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

Was ich dachte, würde es so schaffen, dass die Sitzungsfabrik in diesen Fällen nicht festgelegt wird und daher keine Cookies. Ich verstehe nicht, was mit der Middleware gut genug los ist. Es würde mir auch in Ordnung sein, einen Weg zu finden, um es zu machen, damit Antwortobjekte mit einem "Anwendung/JSON" -Mimetyp diesen Cookie nicht enthalten. Jede Hilfe wäre sehr geschätzt.

War es hilfreich?

Lösung

Eine Möglichkeit, dies zu tun, besteht darin, eine zu verwenden NewResponse Teilnehmer Das würde die ausgehende Antwort ändern.

Zum Beispiel:

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

Dies wäre eine Möglichkeit, alle Cookies aus allen Antworten zu entfernen. Eine andere Möglichkeit wäre, eine neue Sitzungsfabrik zu erstellen, in der prüft, ob die aktuelle URL eine API -Anfrage ist, und wenn ja, erstellt sie überhaupt keine Sitzung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top