用于存储用户信息的 MVC 会话与数据库调用

MVC Session for storing user information vs DB call

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

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

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

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

是否有推荐的做法来存储这样的用户信息?我还有一个 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();

任何指点都会很棒!

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

1) 缓存

2) 会话

3) 静态 类

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

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

如果您使用内置的 Umbraco 会员服务 (link 1, link 2) to manage your users, you'll have a relatively simple way to get current logged in member。使用自​​定义数据字段等管理会员资料也很容易。无需过多考虑会话等。

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