9

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

我将不胜感激有关此的任何建议。

4

2 回答 2

6

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

您应该能够优化存储在会话 cookie 中的数据。例如: - 如果您的应用程序总是需要在每个页面上显示用户的名称,您可以在会话 cookie 中声明名称。但是,如果您只需要在一个“用户资料”页面中显示其他用户信息,如地址、公司等...,您可以使用会话 cookie 中存储的“名称标识符”声明在数据库中查询这些详细信息。如果您查看 ASPNET 身份,您会发现您不需要直接使用会话 cookie,因为 cookie 身份验证中间件确保声明可通过 MVC 控制器的用户属性(或 ClaimsPrinciple.Current)获得。您应该通过 User 属性决定哪些声明应可用于所有请求,以及应通过某些 userInformation 数据库查询哪些用户属性。

于 2016-02-08T11:30:49.783 回答
5

根据我对声明、cookie 和存储规则的了解,IMO(这只是我的观点):

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

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

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

于 2017-04-20T21:01:57.877 回答