【问题标题】:Using Redis as a session state provider使用 Redis 作为会话状态提供者
【发布时间】:2015-08-27 21:27:04
【问题描述】:

我想用 ASP.Net 创建真正的 RESTful API。根据 REST 架构。应用程序必须是无状态的。这意味着我不能使用正常的会话。我找到了一个文档here,描述了如何使用 Redis 作为会话状态提供者。由于它是外部的(不是服务器的一部分),它是否适合创建无状态 API?我该怎么办。我会创建一个密钥来声明用户已通过身份验证,然后再创建一个密钥来引用当前用户,还是我想错了?

【问题讨论】:

    标签: asp.net session redis stateless


    【解决方案1】:

    您可以使用 Redis 作为缓存来保存有关用户的各种状态。这个想法是,当用户登录时,您可能需要从数据库中加载一堆关于他们的信息(姓名、地址等......),您知道用户可能需要重用其中的一些信息信息,因此您不想每次都从数据库中重新加载它。相反,您可以将其缓存在 Redis 中几分钟,因此在用户的下一个请求时,您可以非常快速地从 Redis 中提取数据,而不必返回到您的数据库。

    对于身份验证,您可以在 redis 缓存中创建一个临时令牌,您也可以将其作为 cookie 返回给用户,以便您可以在后续请求中检查它是否存在,而无需运行一堆耗时的 bcrypt每次后续身份验证的哈希值或类似的值。

    这一切都保持无状态,因为即使缓存由于某种原因不可用,用户的请求仍然包含回答他或她的请求所需的所有状态。 Redis 所做的只是让您在可用时加快响应速度。

    【讨论】:

    • 好吧,我一定是误会了帖子。但是,我确实有一个跟进:应该如何创建临时令牌?随机哈希字符串就足够了吗?还是有更安全的方法?
    • 一个随机的哈希字符串,比如说,在几个小时内过期的 15 个字符应该没问题。只需确保以真正随机的方式生成每一个。
    • 好的,谢谢。不过,我有两个最后的问题: 1. 假设客户端将是本地移动应用程序而不是 Web 客户端。每个平台的键/值存储就足够了,而不是 cookie? 2. `Microsoft.Web.RedisSessionStateProvider1 在哪里发挥作用?
    猜你喜欢
    • 2015-03-10
    • 2011-11-19
    • 2015-09-08
    • 1970-01-01
    • 2015-11-28
    • 2016-04-19
    • 1970-01-01
    • 2019-02-19
    • 2014-12-24
    相关资源
    最近更新 更多