【问题标题】:What is the best way to add a session variable from the database in asp.net?从 asp.net 的数据库中添加会话变量的最佳方法是什么?
【发布时间】:2026-01-10 06:10:01
【问题描述】:

在我的 asp.net MVC 应用程序中,我想添加一个变量(用户拥有的系统类型的标志),每当页面加载或用户执行某些操作时都可以访问该变量。我决定为此添加一个会话变量(这看起来合理吗?),我只需要从数据库中的表中获取标志。我的计划是在 Session_Start 上设置变量,但这似乎不是正确的方法,因为我需要查询数据库并且我不确定我是否应该从 Global.asax 中。我应该在哪里填充这个变量?还是有更好的方法?

提前致谢!

【问题讨论】:

    标签: asp.net session session-variables


    【解决方案1】:

    Session 变量是一个合理的选择,session_start 可以是获取值的地方。但是,如果该值是特定于用户的,那么在这种情况下,您需要用户身份。身份验证将建立用户的身份,而不是会话开始(两者在 ASP.NET 中都是独立的) - 因此,而不是 session_start,更好的选择是 Application_AcquireRequestState,您应该检查用户是否经过身份验证,如果是,然后检查是否您的会话变量是否已设置。如果未设置,则可以从数据库中获取值。

    一个轻微的变化是按需加载,即创建一个包装器方法来获取标志值。 Wrapper 方法将检查值是否已经被检索 - 如果没有,那么它将获取它并将值缓存在合适的存储中(例如会话状态)。

    【讨论】:

    • 谢谢!包装方法是否检查每个请求或页面加载的值,而不是在 session_start 上?
    • @Kai,当您实际需要标志值时应使用包装器方法 - 因此名称为“按需(或延迟)加载”。包装器方法将是唯一的方法,应该访问标志值 - 其余代码将不知道如何获取值以及缓存的位置。
    最近更新 更多