【发布时间】:2010-02-15 21:35:57
【问题描述】:
在 ASP.NET MVC 中,我使用会话变量获得了一种被忽视的氛围。
一旦用户登录,我想保留用户的userId,这样我就不必一直查询它等等。
在 ASP.NET MVC 中最有效的方法是什么?
【问题讨论】:
标签: asp.net-mvc
在 ASP.NET MVC 中,我使用会话变量获得了一种被忽视的氛围。
一旦用户登录,我想保留用户的userId,这样我就不必一直查询它等等。
在 ASP.NET MVC 中最有效的方法是什么?
【问题讨论】:
标签: asp.net-mvc
我偶尔会看到类似的问题出现,但我不知道这种“氛围”是从哪里来的。这就是 Session 专门设计的——用于存储与会话相关的信息。使用 Session 存储用户 ID 或类似信息绝对没有问题。
【讨论】:
你有正确的氛围。在许多情况下,这不是必需的。会话状态很容易丢失,并且经常被误用于处理登录用户(设置用户登录是通过设置 Session["IsLoggedIn"] = true 或检查 Session["User"] != null 来完成的,突然 Session 消失了并且用户已注销),此时应使用表单身份验证。在这里您可以阅读有关表单身份验证和使用它存储其他数据的信息:
Forms Authentication Configuration and Advanced Topics
如果你还想使用 session,最好创建一个 wrapper 让它更易测试,并去掉代码中的字符串:
【讨论】:
会话旨在用于有状态的用户交互 - 想到购物车。它们被看不起是因为它们测试起来很痛苦,并且倾向于将序列化逻辑强加到控制器中。如果你只想最小化查询,你应该使用缓存。
编辑: HttpContext.Cache 的教程出奇地难找。 Steven Sanderson 在 Pro ASP.net MVC Framework (Apress 2009) p. 中有约 4 页。 530-534。
Caching in asp.net-mvc 也可能会给你一些提示。
【讨论】:
会话状态。在不合适的时候不应该使用它。但没有其他东西对凭证很有效。只需确保它们是可序列化的,这样您就可以在需要时将会话推出进程。
【讨论】: