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:
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. –
Vui lòng xem câu trả lời cập nhật. Hy vọng bạn có ý tưởng. – twil
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. –