في الهرم ، كيف يمكن أن تمنع ملفات تعريف الارتباط من تعيينها في بعض الاستجابات؟

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

الذي اعتقدت أنه سيجعله حتى لا يتم تعيين مصنع الجلسة في تلك الحالات وبالتالي لا توجد ملفات تعريف الارتباط. لا أفهم ما يجري مع الوسيطة بشكل جيد بما فيه الكفاية. سأكون على ما يرام أيضًا في اكتشاف طريقة لجعلها ، لذا لا تتضمن كائنات الاستجابة التي تحتوي على "تطبيق/JSON" هذا ملف تعريف الارتباط. أي مساعدة سيكون محل تقدير كبير.

هل كانت مفيدة؟

المحلول

إحدى الطرق التي يمكنك من خلالها القيام بذلك هي باستخدام 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