【问题标题】:asp.net mvc - where to store userid - integer?asp.net mvc - 在哪里存储用户 ID - 整数?
【发布时间】:2010-02-15 21:35:57
【问题描述】:

在 ASP.NET MVC 中,我使用会话变量获得了一种被忽视的氛围。

一旦用户登录,我想保留用户的userId,这样我就不必一直查询它等等。

在 ASP.NET MVC 中最有效的方法是什么?

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    我偶尔会看到类似的问题出现,但我不知道这种“氛围”是从哪里来的。这就是 Session 专门设计的——用于存储与会话相关的信息。使用 Session 存储用户 ID 或类似信息绝对没有问题。

    【讨论】:

    • 这种氛围来自人们错误地使用会话作为身份验证,这正是 progtick 正在做的事情。
    • 我认为 Membership/Profile 提供程序会为您处理所有这些,Microsoft 鼓励使用它。他们甚至在示例应用中包含一个示例。
    【解决方案2】:

    你有正确的氛围。在许多情况下,这不是必需的。会话状态很容易丢失,并且经常被误用于处理登录用户(设置用户登录是通过设置 Session["IsLoggedIn"] = true 或检查 Session["User"] != null 来完成的,突然 Session 消失了并且用户已注销),此时应使用表单身份验证。在这里您可以阅读有关表单身份验证和使用它存储其他数据的信息:

    Forms Authentication Configuration and Advanced Topics

    如果你还想使用 session,最好创建一个 wrapper 让它更易测试,并去掉代码中的字符串:

    Wrapper for ASP.NET Session

    【讨论】:

    • 你不会使用表单身份验证然后在会话中存储用户名等吗?
    • @d03boy:用户名默认存储在表单身份验证 cookie 中。您可以添加用户的 ID。如果您丢失了会话(并且在很多情况下都可能发生,例如当有人更改 web.config 时),您可以将数据保存在安全的地方,而不必重建它。好的,你可以使用会话,但是记住,当用户登录时它可能会丢失。
    【解决方案3】:

    会话旨在用于有状态的用户交互 - 想到购物车。它们被看不起是因为它们测试起来很痛苦,并且倾向于将序列化逻辑强加到控制器中。如果你只想最小化查询,你应该使用缓存。

    编辑: HttpContext.Cache 的教程出奇地难找。 Steven Sanderson 在 Pro ASP.net MVC Framework (Apress 2009) p. 中有约 4 页。 530-534。

    Caching in asp.net-mvc 也可能会给你一些提示。

    【讨论】:

    • 你能发布一个指向asp.net mvc缓存的链接吗?
    【解决方案4】:

    会话状态。在不合适的时候不应该使用它。但没有其他东西对凭证很有效。只需确保它们是可序列化的,这样您就可以在需要时将会话推出进程。

    【讨论】:

    • “但是没有其他东西对凭证很有效” 什么?像 cookie 和 FormsAuthentication? Cookie 比 Session 稳定 1000%。
    • 为什么你不能只检查一个会话并在它不可用时让用户再次登录?我不太明白为什么 cookie 更好。
    • 我不是在争论——我真的很想听到更多关于这个的信息。
    • 登录通常是一个数据密集型过程。您不仅要加载用户,还要加载他们的授权数据。在某些情况下,这来自外部系统(AD/LDAP/Web Svc)。这不是您希望在每个页面请求上加载的那种数据。所有这些都假设使用 cookie。但是您可能也不希望在每个请求上都遍历该数据。所以,我更喜欢只把键放在 cookie 中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 2016-06-17
    • 2011-06-26
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    相关资源
    最近更新 更多