2014-11-04 10 views
5

Obecnie moja aplikacja kolba (który używa sesje) wykonuje następujące obsługiwać jedną domenę:Jak skonfigurować aplikację pojedynczych kolb do obsługi wielu domen?

app.config.from_object (Settings)

aw ustawieniach obiektu:

SESSION_COOKIE_DOMAIN =”. first.com "

Chciałbym teraz dynamicznie ustawić domenę plików cookie sesji, aby obsłużyć na przykład żądania ze strony www.first.com i www.second.com. Pamiętaj, że mówię o domenach, ale nie subdomenach. Dziękuję Ci.

Odpowiedz

5

grepping SESSION_COOKIE_DOMAIN pośrednictwem jednego repo GitHub kolba może zobaczyć, że jest ona wykorzystywana jak this:

def get_cookie_domain(self, app): 
    """Helpful helper method that returns the cookie domain that should 
    be used for the session cookie if session cookies are used. 
    """ 
    if app.config['SESSION_COOKIE_DOMAIN'] is not None: 
     return app.config['SESSION_COOKIE_DOMAIN'] 
    if app.config['SERVER_NAME'] is not None: 
     # chop of the port which is usually not supported by browsers 
     rv = '.' + app.config['SERVER_NAME'].rsplit(':', 1)[0] 

     # Google chrome does not like cookies set to .localhost, so 
     # we just go with no domain then. Flask documents anyways that 
     # cross domain cookies need a fully qualified domain name 
     if rv == '.localhost': 
      rv = None 

     # If we infer the cookie domain from the server name we need 
     # to check if we are in a subpath. In that case we can't 
     # set a cross domain cookie. 
     if rv is not None: 
      path = self.get_cookie_path(app) 
      if path != '/': 
       rv = rv.lstrip('.') 

     return rv 

robi to samo z get_cookie_domain( będziesz see:

def save_session(self, app, session, response): 
    domain = self.get_cookie_domain(app) 
    path = self.get_cookie_path(app) 

    ... 

OK. Teraz musimy tylko dowiedzieć się, jakiej nazwy domeny użyć. Przeszukując docs lub code zobaczysz, że save_session() jest wywoływany w kontekście żądania. Więc wystarczy zaimportować obiekt request od flask modułu:

from flask import request 

i użyć go wewnątrz save_session() celu określenia nazwy domeny dla plików cookie (np z nagłówka Host) tak:

def save_session(self, app, session, response): 
    domain = '.' + request.headers['Host'] 
    path = self.get_cookie_path(app) 

    # the rest of the method is intact 

The Jedyny czas, w którym musisz określić domenę plików cookie, to kiedy odsyłasz je z obiektem odpowiedzi. Należy pamiętać, że nagłówek Host może być nieobecny.

Aby drut aż całość będzie trzeba podać swoją wersję (podklasa) z SecureCookieSessionInterface:

app = Flask(__name__) 
app.session_interface = MySessionInterface() 

więcej linków Doc:

+0

Witaj, Twillu, rozumiem większość z tego, co powiedziałeś, oprócz ostatniego p sztuka. Mogę uzyskać nazwę domeny, wykonując: domain = request.headers ['Host'] Nie rozumiem jednak, co masz na myśli przez "i użyj go wewnątrz funkcji save_session(), aby określić nazwę domeny dla plików cookie" . Moje pytanie brzmi: kiedy otrzymam nazwę domeny, gdzie/jak ją ustawić? Dziękuję Ci. –

+0

Proszę zobaczyć zaktualizowaną odpowiedź. Mam nadzieję, że masz pomysł. – twil

+0

Cześć, jestem nowy w kolbie/pytonie, ale mam pomysł. Spróbuję go później podłączyć, dziękuję. –

Powiązane problemy