【问题标题】:MVC Session for storing user information vs DB call用于存储用户信息与 DB 调用的 MVC 会话
【发布时间】:2015-12-14 07:42:48
【问题描述】:

我有一个用户详细信息区域,该区域分为大约 6 个不同的页面(详细信息、联系方式、偏好等)。我需要在登录后访问所有用户详细信息。

我打算在登录后将用户详细信息添加到这样的会话中,这样我就可以从不同的页面访问它们,而不必在每个页面上调用数据库;

Session["name"] = name;
Session["bla"] = bla;

但是,我在 google 上搜索过,有些人谈论将会话保存到数据库,听起来我可能不使用它。用户可能不会访问每个页面或需要访问所有这些信息,因此将它们全部添加到 Session 可能被视为有点不必要。

是否有推荐的做法来存储这样的用户信息?我还有一个需要在每一页上显示的 ID。也许这样的东西更适合会话和更详细的信息页面以与他们自己的数据库调用保持一致?

.

编辑:我正在使用 Umbraco 7.2.8 并从 MemberService 获取成员详细信息。我担心它每次都会访问数据库。我获取成员详细信息以及自定义成员属性(当前在每个控制器中)的代码是;

        // Get the details of the user currently logged in
        var profileModel = Members.GetCurrentMemberProfileModel();

        // Get the custom properties for the member
        var member = memberService.GetByUsername(profileModel.UserName);

        model.Firstname = profileModel.Name;
        model.Email = profileModel.Email;
        model.specialID = member.Properties["specialID"].Value.ToString();

任何指针都会很棒!

【问题讨论】:

  • 如果您将项目更新到 MVC5 并使用 Microsoft 的新身份验证库,您可以将信息添加到经过身份验证的身份的声明集合中。
  • 将数据存储在 Session 中以避免调用数据库是一种很好的做法,尤其是对于不经常更改的数据。过度使用Session 并在那里放置太多数据会导致问题(应用程序池将被强制回收,所有会话都会过期),这会导致更多问题。

标签: asp.net-mvc asp.net-mvc-4 session umbraco


【解决方案1】:

如果您使用内置的 Umbraco 会员服务(link 1、link 2)来管理您的用户,您将有一个相对简单的方法来获取current logged in member。使用自定义数据字段等管理会员资料也很容易。无需过多考虑会话等。

编辑:take a look in here - specifically the GetCurrentPersistedMember() method - Umbraco 正在使用缓存来保存当前成员

【讨论】:

  • 嗨 - 我目前正在使用成员服务 (memberService.GetByUsername()) 来获取成员的自定义属性,但是每次调用它都会在某个地方读取它?这是我试图避免的。
  • 嗯,好吧,也许那应该是你描述的一部分 :-) 我不认为它每次都会访问数据库,但我没有任何证据 - 所以我猜你可以将整个成员配置文件保存在会话变量中,而不是在其自己的会话中保存每个属性?不知道我将如何使用缓存。
  • 找到从缓存中获取当前成员的代码位 :-) 用链接更新了我的答案。
  • 我已经用我正在使用的 Umbraco 特定代码更新了我的问题。如果这是来自缓存每个调用,那么我认为应该没问题?
  • 酷 ;-) 是的,我会说它可以安全使用。如果你注意到加载时间很长,我猜你总是可以做一些性能测试,但我怀疑这是否有必要:-)
【解决方案2】:

在内存中存储数据的三种流行方式

1) 缓存

2) 会话

3) 静态类

在以上三个中,我总是更喜欢缓存,正如许多文章所建议的那样,我也同意会话比缓存和静态类相对慢。我总是更喜欢缓存而不是会话。

但无论您使用什么,请确保您在单个位置初始化它们,以便每个开发人员都知道整个应用程序中使用的所有会话和缓存。这将有助于代码的可重用性并减少在系统中再次初始化相同值的重复。它还有助于代码的可维护性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 2011-06-03
    • 2014-10-01
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多