【问题标题】:Session issue with Django site on running on AWS Beanstalk在 AWS Beanstalk 上运行的 Django 站点的会话问题
【发布时间】:2016-04-19 00:21:42
【问题描述】:

我在 AWS Beanstalk 上运行一个 Django 站点,当 AWS 启动一个新实例以处理流量高峰时,我遇到了会话问题。定期在 /admin 中编辑内容的用户在尝试保存时会被注销,并且他们的编辑会丢失。

问题是:在多实例 Django 环境中处理会话的最佳方式是什么?

中间件设置:

MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'debug_toolbar.middleware.DebugToolbarMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
)

缓存设置(使用 AWS Elasticache):

已编辑,最初声明的位置是 127.0.0.1,这是不正确的

CACHES = {
'default': {
    'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
    'LOCATION': 'cache.mydomain.com:11211',
  }
}

会话设置:

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'

我也试过了:

SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
SESSION_SAVE_EVERY_REQUEST = True

但这没有用。

我应该考虑数据库支持的会话吗?我担心性能。

【问题讨论】:

    标签: django session amazon-web-services


    【解决方案1】:

    如果您使用缓存会话,则需要将缓存保存在一个位置而不是 127.0.0.1 上——这样所有 AWS 实例都可以访问同一个缓存,并且所有实例都可以访问会话数据,而不是每个 AWS 实例只能访问自己的缓存。

    如果您不想或不能这样做,您可以考虑使用 db-backed session 选项。例如,django.contrib.sessions.backends.cached_db 应该可以工作,因为它有 db-backed,即使缓存数据偶尔不可用。这个性能对写入有影响,因为写入被发送到数据库,而不是读取,它只在缓存数据不可用或丢失时检查数据库。

    【讨论】:

    • 谢谢瑞恩。事实证明,我上面列出的缓存设置是错误的。包含另一个设置文件,它覆盖缓存设置以指向 AWS Elasticache 上的共享缓存。我已经相应地更新了原始问题。所以,还是个谜。
    • 我会尝试使用 db 支持的会话引擎,然后,如前所述。我对您的缓存设置知之甚少,但是如果缓存数据意外丢失并且您需要保留会话数据,那么这是一种可靠的方法。
    • 我们切换到 db 支持的会话,问题似乎已得到解决。仍然不确定为什么缓存会话不起作用(即使使用共享缓存)。感谢您的帮助。
    猜你喜欢
    • 2013-12-03
    • 2012-10-13
    • 2015-07-05
    • 2016-11-25
    • 2015-04-10
    • 2019-05-16
    • 2020-11-10
    • 2018-11-07
    • 2017-07-10
    相关资源
    最近更新 更多