【问题标题】:How to maintain User-session with ASP.NET MVC如何使用 ASP.NET MVC 维护用户会话
【发布时间】:2011-04-24 07:13:47
【问题描述】:

大家好,我想知道有没有什么方法可以在不使用 ASP.NET MVC 成员资格的情况下维护登录、注销、用户会话等内容?

法拉兹。

【问题讨论】:

  • 尝试使用FormsAuthentication 或编写您自己的会话管理。

标签: asp.net asp.net-mvc-3


【解决方案1】:

您所指的领域涉及三种提供者模型。

MembershipProvider 涉及身份验证、验证用户和存储与用户相关的数据,例如上次登录日期、用户名等。

RoleProvider 与授权用户使用您的应用程序的特定区域有关。

SessionStateProvider 负责为您的应用程序存储会话。

如果默认提供程序不合适,您可以为其中任何一个编写自己的自定义提供程序。您可以在没有提供程序的情况下推出自己的身份验证、授权或会话管理,但是除了实现您自己的自定义提供程序之外,还有很多工作要做。

【讨论】:

    【解决方案2】:

    您可以使用Session 对象来存储会话范围的数据。

    但对于身份验证/授权,您需要提出自己的方案。

    【讨论】:

    • 感谢 Oded,我已将 Session 对象与 ASp.NET 应用程序一起使用。只是怀疑它是否适用于 ASp.NET MVC 模型。
    • 另外,您是否有工作示例/链接在没有 asp.net mvc 成员资格的情况下完成身份验证/授权?
    • @nfa379 - 我脑子里什么都没有。 Google 是您的朋友,但我不知道为什么在会员制有效的情况下您必须重新发明轮子。
    • 现在这很好 qn;) 只是认为会员/角色太复杂了,无法使用简单的应用程序。还是谢谢你:)
    • @nfa379- 有了提供者,你只需要实现你真正想要使用的方法。
    【解决方案3】:

    您需要使用会话字典和会话状态服务器。请参阅http://msdn.microsoft.com/en-us/library/ms178581.aspx 了解更多信息。

    警告:根据我的经验,InProc 会话状态模式仅保留您在当前 HTTP 请求的生命周期内放入 Session 的值。它们不会像您期望的那样在请求中持续存在,即使您使用单个 HTTP 服务器并且您认为内存存储会持续存在。这可能仅在使用 VS2010 中内置的 http 服务器进行调试时发生,但即便如此,在尝试理解为什么不保存状态信息时也会给您带来很多麻烦。

    【讨论】:

    • InProc 会话状态在应用程序进程的生命周期内(或直到被清除)持续存在,因为它存储在进程的地址空间中。如果应用程序被回收,那么您将失去会话。
    • 感谢 Doug,Wat 关于身份验证/授权??
    • @Russ:这就是文档所说的,但这不是我所经历的,这就是我发出警告的原因。 IIS 和 VS 2010 中的内置服务器之间可能存在差异,后者仅具有每个请求的持久性,而前者具有每个进程的持久性。如果是这样,那会使调试和测试变得不可靠。在任何情况下,InProc 都是不可扩展的:只要您需要多个服务器,您就需要一个外部位置来存储状态。
    • @nfa379:我一直在处理需要针对现有系统进行身份验证的情况。通常这意味着在每个请求上检查和验证会话 cookie。如果 cookie 不存在或绑定到不存在的会话,则将用户发送到登录视图。使用现有系统的 api(无论是什么)执行登录并设置一个新的 cookie。理想情况下,现有系统会生成一个适合在 cookie 中使用的令牌,并且会有一个 api 用于在以后的请求中验证令牌。令牌还应与您需要的任何授权信息相关联。
    • @Doug- 老实说,我从未体验过使用 Cassini、IIS Express 和 IIS 5,6 和 7 的情况。也许编辑您的警告以说明您已经体验过InProc 的每个请求问题?我确实同意 InProc 无法扩展,并且我在生产应用程序中避开了它,因为如果应用程序池被回收,会话就会丢失,这是您在执行应用程序更新时不希望发生的事情.至少我会推荐 State Server,即使进程仍在同一台服务器上。
    猜你喜欢
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-27
    • 1970-01-01
    相关资源
    最近更新 更多