SessionMiddleware chuẩn chỉ hỗ trợ một SESSION_COOKIE_DOMAIN, điều này chỉ tốt cho một tên miền và tên miền phụ của chúng.
Đây là biến thể sẽ đặt tên miền cookie động dựa trên máy chủ yêu cầu. Để sử dụng nó, chỉ cần cập nhật MIDDLEWARE_CLASSES của bạn để sử dụng một SessionHostDomainMiddleware, thay vì SessionMiddleware. Điều này tốt hơn, @jcdyer và @interstar?
import time
from django.conf import settings
from django.utils.cache import patch_vary_headers
from django.utils.http import cookie_date
from django.contrib.sessions.middleware import SessionMiddleware
class SessionHostDomainMiddleware(SessionMiddleware):
def process_response(self, request, response):
"""
If request.session was modified, or if the configuration is to save the
session every time, save the changes and set a session cookie.
"""
try:
accessed = request.session.accessed
modified = request.session.modified
except AttributeError:
pass
else:
if accessed:
patch_vary_headers(response, ('Cookie',))
if modified or settings.SESSION_SAVE_EVERY_REQUEST:
if request.session.get_expire_at_browser_close():
max_age = None
expires = None
else:
max_age = request.session.get_expiry_age()
expires_time = time.time() + max_age
expires = cookie_date(expires_time)
# Save the session data and refresh the client cookie.
# Skip session save for 500 responses, refs #3881.
if response.status_code != 500:
request.session.save()
host = request.get_host().split(':')[0]
response.set_cookie(settings.SESSION_COOKIE_NAME,
request.session.session_key, max_age=max_age,
expires=expires, domain=host,
path=settings.SESSION_COOKIE_PATH,
secure=settings.SESSION_COOKIE_SECURE or None,
httponly=settings.SESSION_COOKIE_HTTPONLY or None)
return response
Tôi muốn thứ hai. Không phải là miền phụ. Về cơ bản tôi có một khách hàng có averylongdomainnamethatno-onewantstotype.net và quickname.net và trang web cần phải làm việc cho cả hai. – interstar
Làm cách nào để thêm chuyển hướng từ 'longname.net' vào' shortname.net' để tất cả người dùng chỉ sử dụng 'shortname.net'? –
Cũng sẽ hoạt động giữa 'example.com' và' www.example.com'. –