在 asp 身份声明和会话数据之间进行选择

choose between asp identity claims and sessions data

我试图在将用户特定数据存储在我的 MVC 应用程序中作为身份声明或会话数据之间做出选择,以减少请求时数据库往返的次数和频率。但是,考虑到性能、安全性和其他最佳实践方面的考虑,我不知道该走哪条路。

如果有任何建议,我将不胜感激。

如何为应用存储用户数据在很大程度上取决于应用本身。但作为指南,使用基于声明的身份验证并将声明存储在会话 cookie 中是一种非常常见的方法。看看asp.net身份-http://www.asp.net/identity/overview/getting-started/introduction-to-aspnet-identity

您应该能够优化存储在会话 cookie 中的数据。例如: - 如果您的应用程序总是需要在每个页面上显示用户的姓名,您可以在会话 cookie 中声明姓名。但是,如果您需要在一个 'user profile' 页面中显示地址、公司等其他用户信息,您可以使用存储在会话 cookie 中的 'nameidentifier' 声明在数据库中查询这些详细信息。如果您查看 ASPNET 身份,您会发现您不需要直接使用会话 cookie 作为 cookie 身份验证中间件确保声明可通过 MVC 控制器的用户 属性(或 ClaimsPrinciple.Current)获得.您应该决定通过 User 属性 的所有请求应该可以使用哪些声明,以及应该通过某些 userInformation 数据库查询哪些用户属性。当然,你应该把key(nameidentifier or email)存入claims中的userInformation数据库,这样你就可以随时查询数据库。

IMO(这只是我的意见)基于我对声明、cookie 和存储规则的了解:

在性能方面,我从未见过 Claims 和 Session 存储之间的区别(除非 cookie 从大量声明中变大)就速度而言,它们似乎都具有相同的性能影响(它们都有从某个地方查找数据(CLaims = cookie,会话 = 服务器驱动器存储)作为最佳实践,这将符合您需要存储多少数据。

根据我的经验(如果我错了请纠正我)但是会话数据存储在服务器的磁盘上并且基本上只有您的服务器硬盘可用 space 用于大小限制等而 cookie 确实有硬编码的数据大小限制,你存储的声明越多,cookie 就越大,所以如果你说最大化 cookie,客户端可能会看到性能下降,因为它在 每个 请求到站点,与 Session 一样,服务器在本地查找数据,浏览器发送的数据较少。

所以我对最佳实践的看法是,如果用于保存数据库查找的持久数据占用空间很小,那么确实没有最佳实践,只需使用您喜欢的任何内容即可,但是如果您存储 lot 位,尤其是字符串,然后会话将是我认为的最佳实践,因为它可以节省 client/server 之间的数据往返,并且没有您可能 运行 的大小限制在某个时候进入然后拉出你的头发想知道为什么你的数据不存在(我自己过去做过这个因为如果cookie太大客户只是默默地拒绝它并且花了3天时间才弄清楚它的大小饼干 )