2017-01-13 112 views
-2

我很新的MVC,最近我想从一个空的MVC模板创建一个登录表单。我听说过身份类和会话。这两个有什么区别?应该同时使用它们还是这些不同类型的东西?在ASP.NET MVC中的会话

+1

你想使用令牌而不是会话。会议非常过时。看一看OAuth –

+0

@SimonPrice:什么?没有任何意义。 '会话'并没有过时。我不知道这里的“令牌”是什么,会话是一个没有替代或替代的概念。 HTTP是无状态的。你用会话伪造状态。就那么简单。 –

回答

2

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

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

当谈到类似身份验证的情况时,需要状态来在请求之间持续进行身份验证。在像MVC网站这样的东西中,会话被用于这个目的。在客户端设置一个cookie,然后由客户端发送每个请求。服务器读取cookie,验证身份验证并授权用户。在像Web Api这样的东西中,会话是不允许的,所以客户端必须通过每个请求来传递身份验证,通常采用Authorization标题的形式,其中将包含类似不记名令牌的内容。然而,普通用户通过Web浏览器加载的任何传统网站都将通过会话持续进行认证。

现在,在ASP.NET代码中,有一个名为Session的静态动态字典。这利用会话的概念在Web请求之间保持状态,但不被任何ASP.NET站点可用的身份验证机制使用。不鼓励使用Session,因为通常将数据存储在数据库等更好的地方会更合适。有一些地方使用Session会很好,但你应该有一个很好的理由这样做。但是,再次,这与认证/授权没有任何关系。

最后,ASP.NET网站有许多不同的身份验证系统可用,有些已弃用。就传统的用户身份验证而言,您拥有ASP.NET Membership和Identity。身份更新且优于ASP.NET Membership(也称为FormsAuthentication)。但是,它仅适用于使用MVC 5或Core的网站。

总而言之,如果您今天要创建一个需要身份验证的新网站,则需要查看ASP.NET身份。有大量的examples and tutorials from Microsoft。您可能需要也可能不需要在应用程序中使用Session,但应尽可能避免使用它。无论如何,它与认证/授权完全分离,即使在引擎盖下,它们都使用类似的原则。