Jos*_*osh 5 asp.net-mvc session-state claims-based-identity session-cookies cookie-session
我试图在我的MVC应用程序中存储用户特定数据作为身份声明或会话数据之间做出选择,以减少数据库往返请求的数量和频率.但是,考虑到性能,安全性和其他最佳实践考虑因素,我不知道要走哪条路线.
我将对此提出任何建议表示感谢.
如何为应用程序存储用户数据在很大程度上取决于应用程序本身.但作为指南,使用基于声明的身份验证并将声明存储在会话cookie中是一种非常常见的方法.看看asp.net身份 - http://www.asp.net/identity/overview/getting-started/introduction-to-aspnet-identity
您应该能够优化存储在会话cookie中的数据.例如: - 如果您的应用程序始终需要在每个页面上显示用户的名称,则可以在会话cookie中使用名称声明.但是,如果您只需要在一个"用户配置文件"页面中显示其他用户信息(如地址,公司等),则可以使用存储在会话cookie中的"nameidentifier"声明在数据库中查询这些详细信息.如果您查看ASPNET标识,您将看到您不需要直接使用会话cookie,因为cookie身份验证中间件确保声明可通过MVC控制器的User属性(或ClaimsPrinciple.Current)获得.您应该通过User属性确定应该对所有请求可用的声明以及应通过某个userInformation数据库查询哪些用户属性.当然,您应该将密钥(nameidentifier或email)存储到声明中的userInformation数据库中,以便您可以随时查询数据库.
IMO(这只是我的观点)基于我对声明、cookie 和存储规则的了解:
就性能而言,我从未见过声明和会话存储之间存在差异(除非 cookie 由于大量声明而变得很大),就速度而言,它们似乎都具有相同的性能影响(它们都必须查找数据)来自某个地方(CLaims = cookie,会话=服务器驱动器存储)至于最佳实践,这将取决于您需要存储多少数据。
根据我的经验(如果我错了,请纠正我),但会话数据存储在服务器的磁盘上,基本上只有服务器硬盘驱动器可用空间用于大小限制等,而 cookie 确实有硬编码的数据大小限制,您存储的声明越多,cookie 就越大,因此,如果您说最大化该 cookie,客户端可能会看到性能受到影响,因为它在向站点的每个请求中发送整个 cookie 数据,就像会话一样服务器在本地查找数据,浏览器发送的数据较少。
所以我对最佳实践的看法是,如果用于保存数据库查找的持久数据占用空间很小,那么实际上没有最佳实践,只需使用您喜欢的任何内容即可,但是如果您存储很多位(尤其是字符串),那么会话就会在我看来,这是最佳实践,因为它节省了客户端/服务器之间的数据往返,并且没有您可能在某些时候遇到的大小限制,然后拔出头发想知道为什么您的数据不存在(完成此操作)过去我自己因为如果 cookie 太大,客户就会默默地拒绝它,并花了 3 天的时间才弄清楚它是 cookie 的大小)
| 归档时间: |
|
| 查看次数: |
5110 次 |
| 最近记录: |