【发布时间】:2017-12-21 04:27:17
【问题描述】:
与同事聊天后,我很想知道是否有人进行过任何研究/测试,以了解在 asp.net 会话中存储数据的最有效和推荐的方法。
我最近偶然发现了这个问题:How to access session variables from any class in ASP.NET? 并开始使用该技术(创建我自己的会话类以赋予我智能感知的优势并防止在从会话中检索数据时需要显式转换)。
但是,有人建议将我的对象中的数据序列化为字符串,然后存储...然后在检索时反序列化,这可能不是很有效。
例如...如果我想加载用户当前的权限并将它们存储在会话中;我的会话对象中可能有一个属性定义为List<int> user_permissions,然后在每个页面上我都可以if (session_class.user_permissions.contains(7))
或者,我可以直接将会话存储为字符串,例如; HttpContext.Current.Session["user_permissions"] = "[1][4][8][12]" 然后在每个页面上我都可以查看HttpContext.Current.Session["user_permissions"].contains("[7]")
哪个选项更有效并且可以量化?
【问题讨论】:
-
与其使用字符串来有效地表示按位值,为什么不使用基于标志的枚举并存储整数值呢?更高效,您可以使用枚举值而不是像
"[7]"这样的字符串,这没有任何意义。 -
我刚刚看了看,这看起来是一个非常有趣的解决方案,但我想知道如果我们拥有大量权限,它的效果如何?
-
那么你想了多少?您可以拥有一个基础类型为
long的枚举,因此您将获得 64 位... -
我认为这不会削减它。我可能已经想到了大约 50 个,并且我们希望确保我们的应用程序是可扩展的,因此从一开始就对其进行设计似乎是一种糟糕的方式。不过好主意-谢谢
-
所以有两个枚举和两个值。这将涵盖 128 个。如果有 128 个独立权限,我认为您将遇到 people 了解您的系统的扩展问题。
标签: c# asp.net session session-variables