【问题标题】:Django: request.session is stable even when using multiple server?Django:即使使用多个服务器,request.session 也很稳定?
【发布时间】:2016-10-13 16:37:59
【问题描述】:

根据一些Django 书籍和在线代码,当需要使用一些上下文变量重定向(在服务器端)时,一些值作为会话变量传递,例如request.session['fruit'] = 'apple'.

但我想知道即使我使用多个服务器时它是否真的能很好地工作。(让我们将每个服务器称为 A、B、C)

在这种情况下,用户的请求可以随机发送到这些服务器之一。 例如,第一个请求发送到 A 服务器,下一个请求发送到 B 服务器,第三个请求再次发送到 A 服务器。

所以,我只是认为会话数据 (request.session) 可能会因为这种随机性而丢失或变得混乱。

我说的对吗?或者由于会话是基于用户的cookie session-id的服务器端数据,并保存在数据库中,所以我不必担心?

谢谢:)

【问题讨论】:

    标签: django session


    【解决方案1】:

    这取决于您使用的会话后端。数据库通常是集中式的,因此如果您使用数据库后端,哪个服务器处理请求并不重要。

    缓存可能在服务器本地。如果要使用缓存或缓存数据库后端,则需要考虑这一点。缓存的数据库后端使用直写式缓存:仅当缓存为空或写入新数据时才从数据库中检索数据。如果您更改会话,其他服务器的本地缓存中可能有陈旧的数据。

    因此,如果您使用缓存或缓存数据库后端,则需要有一个可以保存会话的集中式缓存存储。

    【讨论】:

    • 我正在使用'django.contrib.sessions.middleware.SessionMiddleware',这意味着我不必担心会话会搞砸?
    • @user3595632 无论您使用的是什么会话后端,都需要中间件。重要的是您的 SESSION_ENGINE 设置,但这默认使用数据库后端。因此,如果您没有更改默认值(并且您使用的是集中式数据库),则无需担心。
    猜你喜欢
    • 2016-03-20
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多