2014-11-04 16 views
5

Hiện nay, ứng dụng bình của tôi (mà sử dụng phiên) nào sau đây để xử lý ONE miền:Cách cấu hình một ứng dụng bình đơn để xử lý nhiều miền?

app.config.from_object (cài đặt)

và trong các thiết lập đối tượng:

SESSION_COOKIE_DOMAIN =". first.com "

Điều tôi muốn làm bây giờ là tự động đặt tên miền cookie phiên để xử lý, ví dụ: yêu cầu từ www.first.com và www.second.com. Xin lưu ý rằng tôi đang nói về miền nhưng không phải tên miền phụ. Cảm ơn bạn.

Trả lời

5

grepping SESSION_COOKIE_DOMAIN qua repo một Github Flask có thể thấy rằng nó được sử dụng như 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 

Làm điều tương tự với get_cookie_domain( bạn sẽ see:

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

    ... 

OK. Bây giờ chúng ta chỉ cần tìm ra tên miền để sử dụng. Đào qua docs hoặc code bạn sẽ thấy rằng save_session() được gọi trong ngữ cảnh yêu cầu. Vì vậy, bạn chỉ cần nhập các đối tượng request từ flask mô-đun:

from flask import request 

và sử dụng nó bên save_session() để xác định tên miền cho các cookie (ví dụ từ Host tiêu đề) như thế này:

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

    # the rest of the method is intact 

Các chỉ có thời gian bạn cần phải xác định tên miền cookie là khi bạn gửi chúng trở lại với đối tượng phản hồi.

Cũng lưu ý rằng tiêu đề Host có thể không có.

Để cấp điện cho toàn bộ điều bạn sẽ cần phải xác định phiên bản của bạn (subclass) của SecureCookieSessionInterface:

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

Thêm liên kết doc:

+0

Xin chào Twil, tôi hiểu hầu hết những gì bạn nói ngoại trừ p cuối cùng nghệ thuật. Tôi có thể lấy tên miền bằng cách thực hiện: domain = request.headers ['Host'] Tuy nhiên, tôi không hiểu ý bạn là gì và sử dụng nó bên trong save_session() để xác định tên miền cho cookie " . Câu hỏi của tôi là: Khi tôi nhận được tên miền, tôi nên đặt tên miền ở đâu/làm cách nào? Cảm ơn bạn. –

+0

Vui lòng xem câu trả lời cập nhật. Hy vọng bạn có ý tưởng. – twil

+0

Xin chào, tôi mới dùng bình/python nhưng tôi có ý tưởng. Tôi sẽ cố gắng để dây nó lên sau, cảm ơn bạn. –

Các vấn đề liên quan