我正在尝试在我的MVC应用程序中将用户特定数据存储为身份声明或会话数据,以减少数据库往返请求的数量和频率。但是,考虑到性能,安全性和其他最佳实践考虑因素,我不知道要走哪条路。
我将对此提出任何建议表示感谢。
答案 0 :(得分:5)
如何为应用程序存储用户数据在很大程度上取决于应用程序本身。但作为指南,使用基于声明的身份验证并将声明存储在会话cookie中是一种非常常见的方法。看看asp.net身份 - http://www.asp.net/identity/overview/getting-started/introduction-to-aspnet-identity
您应该能够优化会话cookie中存储的数据。例如: - 如果您的应用程序始终需要在每个页面上显示用户的名称,则可以在会话cookie中使用名称声明。但是,如果您只需要在一个用户个人资料中显示其他用户信息,例如地址,公司等...页面,您可以使用' nameidentifier'在数据库中查询这些详细信息。存储在会话cookie中的声明。如果您查看ASPNET标识,您将看到您不需要直接使用会话cookie,因为cookie身份验证中间件确保声明可通过MVC控制器的User属性(或ClaimsPrinciple.Current)获得。您应该通过User属性确定应该对所有请求可用的声明以及应通过某个userInformation数据库查询哪些用户属性。当然,您应该将密钥(nameidentifier或email)存储到声明中的userInformation数据库中,以便您可以随时查询数据库。
答案 1 :(得分:2)
IMO(以及我的观点)基于我对声明,Cookie和存储规则的了解:
性能明智我从来没有看到声明和会话存储之间的差异(除非cookie从很多声明中变得很大)它们似乎都与速度相同(尽管它们都必须去)从某个地方查找数据(CLaims = cookie,会话=服务器驱动器存储),以及最佳实践,这些实践将与您需要存储多少数据的行相关。
根据我的经验(如果我错了,请纠正我)但会话数据存储在服务器上的磁盘上,基本上只有你的服务器硬盘可用空间用于大小限制等,而cookie确实有一个硬编码的数据大小限制,你存储的声明越多,cookie就越大,所以如果你说最大化那个cookie,那么客户可能会发现性能受到影响,因为它在每个<发送整个cookie数据/ em>请求到站点,与Session一样,服务器在本地查找数据,浏览器发送的数据较少。
所以我对最佳实践的看法是,如果用于保存数据库查找的持久性数据占用空间很小,那么最好不要使用您喜欢的任何内容,但是如果您存储批次比特特别是字符串然后会话将是我认为的最佳做法,因为它可以保存客户端/服务器之间的数据往返,并且没有你可能在某个时候遇到的大小限制然后拉你的想知道为什么你的数据不存在(过去自己这样做了,因为如果cookie太大,客户端就会默默地拒绝它,花了3天的时间来弄清楚它是cookie的大小)