-->

以处理龙卷风用户会话的标准方式(standard way to handle user sessio

2019-07-21 03:14发布

因此,为了避免“没有一个最佳答案”的问题,我要问,不是最好的办法,但标准还是最常用的方式使用龙卷风框架时处理会话。 也就是说,如果我们不使用第三方认证(OAuth的,等等),而是我们希望有我们在浏览器中的安全Cookie,但大多数存储在服务器上的会话信息的,什么是自己的用户表这样做的最常见的方式是什么? 我见过一些人使用Redis的,有些人使用他们正常的数据库(MySQL或Postgres的或其他),有些人使用memcached的。

我工作的应用程序将不会有百万用户的时间,或者甚至可能数千人。 这就需要最终得到一些比较复杂的授权方案,虽然。 我正在寻找的是确保我们不这样做,下降比一般的龙卷风社区不同的路径,因为身份验证和授权一些“怪异”的,而这是我们所需要的东西,是不是就是在我们的产品和这样的核心不是我们应该区分自己。 所以,我们要找的是大多数人(谁使用龙卷风)在这方面正在做的,所以我认为这是有(理论上)的客观真实答案的问题。

理想的答案将指向示例代码,当然。

Answer 1:

龙卷风设计是无状态的,没有会话支持开箱即用。

使用安全cookies来储存像USER_ID敏感信息。 使用标准Cookie存储并不重要信息。

对于存储大型对象 - 使用标准的方案 - 的MySQL +内存缓存。



Answer 2:

下面是它的似乎其他微架构处理会话(CherryPy的,瓶为例):

  1. 创建一个表持有session_id和任何其他领域,你会希望跟踪每个会话的基础上。 一些框架将允许你只存储在一个文件中这些信息在每个用户的基础上,或将只是直接存储,留作回忆。 如果你的应用是足够小,你可以考虑这些选项为好,但数据库应该是简单的你自己去实现。
  2. 当接收到一个请求( RequestHandler initialize()函数怎么想吗?),并没有session_id的cookie时,使用随机发电机组安全会话ID。 我没有与龙卷风太多的经验,但它看起来像设置安全cookie应该是这个有用的。 存储session_id在你的会话表和相关信息。 需要注意的是每个用户都会有一个会议,即使是那些没有登录。当用户登录时,你要重视其地位的登录(和他们的用户名/ USER_ID等),以他们的会话。
  3. 在您的RequestHandler初始化函数,如果有一个session_id的cookie时,在读什么都会话信息,你从数据库中需要和可能创建自己的Session对象来填充和存储作为请求处理的成员变量。

请记住,会议一定量的闲置后应到期,所以你要以检查为好。 如果你想要一个“记住我”类型的日志中的情况下,你将不得不使用安全cookie以通知(关于这在OWASP阅读起来,以确保它尽可能的安全,又想起它看起来像龙卷风的secure_cookie可能有帮助通过创建一个新的会话和任何相关的信息传递到它从旧与),并在接收到超时会话就可以重新认证的新用户。



Answer 3:

与会议的关键问题是没有地方来存储它们,是如何聪明到期它们。 不管会话存储在哪里,只要存储会话的数量是合理的(即只活动会话加上一些多余的存储),所有这些数据是要适应RAM和快速服务。 如果有很多老的垃圾,你可能期望不可预测的延迟(需要打磁盘加载会话)。



Answer 4:

没有直接内置到龙卷风这一目的什么。 正如其他人已经评论说,龙卷风的设计是一个非常快的异步架构。 它是由设计精简。 然而,也可以在你自己的会话管理能力挂钩。 您需要前导部分添加到将创造或抓住一个会话容器中的每个处理器。 您将需要会话ID存储在cookie中。 如果你不严格HTTPS,那么你将要使用安全cookie。 会话持久性可以是你的选择,如Redis的,Postgres的,MySQL和文件存储等任何技术...

有一个Github上项目,对龙卷风提供会话管理。 即使你不打算使用它,它可以提供深入了解如何构建自己的会话管理。 GitHub的项目被称为dustdevil 。 全面披露 - 我们创造了这个几年前,但发现它非常容易使用,今天有它在积极地利用。



文章来源: standard way to handle user session in tornado