我在会话中有一个与用户个人资料存储相关的基本问题。
假设我有一个存储用户配置文件的Account表,并且我已将此表链接到ASP.NET SimpleMembership。用户登录后,控制器可能需要检索其帐户中的信息或基于其帐户。我现在正在做的是每次需要数据时查询数据库,类似于:_dbContext.Accounts.Where(a => a.EmailAddress == User.Identity.Name).Single()
。
但我担心这会对数据库造成不必要的负担,并认为一个更好的想法(也许是每个人都做的!)是在用户登录后将Account对象存储在Session变量中,从而实现直接访问无需重新查询数据库。 这是通常的做法吗? Session变量和身份验证之间是否存在“取消同步”的风险?
由于
答案 0 :(得分:2)
我们的网站在登录时对用户类型对象使用相同类型的方法。确认登录后,我们将用户对象存储在会话变量中。如果更改或更新某些内容,则更新对象,并根据情况更改数据库中的更新(时间意味着在更改后立即更新,或者在收集一组更改后)。
这取决于您的系统有多复杂。我们相当复杂,事实证明这是一种非常可靠的方式 - 不需要经常维护和更新。