ASP.NET MVC中的会话

时间:2017-01-13 13:07:53

标签: c# asp.net-mvc

我对MVC很新,最近我想从一个空的MVC模板创建一个Login Form。我听说过Identity class和Sessions。这两个有什么区别?它们应该同时使用还是这些不同的东西?

1 个答案:

答案 0 :(得分:2)

在这个相对简单的问题中,有很多事情要发生。首先,我认为你需要了解会议是什么。

HTTP协议是无状态的。这意味着每个请求都是它自己的东西,不受以前发生的任何事情的影响。但是,应用程序需要状态,因此引入了会话的概念。会话是两个组件的组合,一个是服务器端,另一个是客户端。在传统意义上,服务器将存储一些与会话ID相结合的数据。然后它会将cookie发送到包含该会话ID的客户端。客户端在下一个请求时发回cookie。当服务器看到cookie时,它使用它包含的会话ID来查找先前存储的数据。

当涉及到身份验证等问题时,需要状态来保持请求之间的身份验证。在像MVC站点这样的东西中,会话用于此目的。在客户端上设置cookie,然后由客户端发送回每个请求。服务器读取cookie,验证身份验证并授权用户。在类似Web Api的情况下,不允许会话,因此客户端必须通过每个请求传递身份验证,通常采用Authorization标头的形式,其中包括持有者令牌等内容。但是,普通用户通过Web浏览器加载的任何传统网站都将通过会话保持身份验证。

现在,在ASP.NET代码中,有一个名为Session的静态动态字典。这利用会话的概念在Web请求之间保持状态,但ASP.NET站点可用的任何身份验证机制都不使用它。不鼓励使用Session,因为通常将您尝试存储的数据保存在更好的位置(如数据库)更为合适。使用Session的某些区域会很好,但您应该有充分的理由这样做。但是,这一切都与认证/授权无关。

最后,ASP.NET站点提供了许多不同的身份验证系统,有些已弃用。在传统的用户身份验证方面,您拥有ASP.NET成员身份和身份。身份更新,并且优于ASP.NET成员身份(也称为FormsAuthentication)。但是,它仅适用于使用MVC 5或Core的网站。

如果您今天要创建一个需要身份验证的新网站,那么您需要查看ASP.NET身份。有examples and tutorials from Microsoft吨。{{3}}。您可能需要或可能不需要在应用程序中使用Session,但应尽可能避免使用它。无论如何,它完全独立于身份验证/授权,即使在引擎盖下,它们都使用类似的原则。