ASP.Net MVC 后端如何知道用户是否登录



我创建了一个 ASP.Net C# MVC 应用程序,其中包含用于身份验证 + localDB 的"个人用户帐户"。我在Visual Studio中使用本地主机上的IIS express启动了该应用程序,注册了一个用户并使用该用户登录。

我正在尝试了解后端如何知道用户在以下情况下已登录:

  1. 在Visual Studio中启动IIS Express和应用程序
  2. 登录
  3. 在Visual Studio中停止IIS快递和应用程序
  4. 在Visual Studio中重新启动IIS Express和应用程序
  5. 用户仍处于登录状态(为什么???)

我检查了数据库中的用户表,找不到任何指示登录用户的字段。我认为停止和重新启动iis express也应该清除后端中的所有内容。

那么后端如何知道在上面的步骤 5 中登录了用户呢?

我在 http 请求中找到了以下 cookie

Cookie: _ga=GA1.1.1546797954.1551225891; __RequestVerificationToken=PSFeb9iP4aZr3wxxb8nJNKtki_1XPTzGO1Hzaf0W3iDsSCnV_qCfMsC9TY980X51c2rANZA-zureu6UHKEssAHza58AdmQUdZVL98VGYlRc1; .AspNet.ApplicationCookie=VUPznoprBRK2z13u03ArrC9HLHeGGUyTSvu9rYpSnZju_Rz4X2V5n9faw0EhnmuFjVN1AIva7HZSAhUBeSZ5jQHSej6XaAExy0hkwF_9vC190LfWBPP-oH3Zp0jj0ZmZ7L3sLlLqux4HV5CZSA-jqhDF4IXAFKyisFFV136PlxrJTmb9OXRrmo9rigCiIy0z_oixDlg1eHVI3T6ptVgn1Qhohtr1mTqoBJsF7gi7CHymSBlyFJ5MgYxfPcWNhJnj3H-WWK1ijkfzxsm0R13m2_6IbIiK1y5uzQBkklb8oMuz0mD27GlwMzteQBP3VLOXn77BreOPefJ8_2AekYjFGjgBIGGpngxLVzDneT4rC-BDiVKdWO_FRuail4ivVAN2ZJtdjK0uEPqnln5rmOlT0MLAhYzHMkk-HTvtW-Xo-Kexinlh58uxz0E7bncY5I6troc19E0fBLMnfXThtaL7ur6CN4pqUyq4yALJCTHszG3RPLQoJja0u1g34i-mKunZ

在Web开发中,有一个非常基本的概念称为cookie。Cookie 还负责在浏览器中存储用户信息。当您登录会员系统时,它会在响应中添加一个名为Set-Cookie的特殊标头,然后存储在浏览器缓存中。通过标头发送的信息包含有关登录用户身份的信息。对于后续请求,浏览器将相同的cookie发送到服务器,会员系统解析该信息以识别发出请求的用户,如果信息有效,则您登录并识别您。

编辑: 发生的操作的细节不是唯一的,这取决于你用于身份验证的库,但如果你使用默认 asp.net 身份验证系统,那么你可以去看看源代码是如何完成的。对于ASP.NET CORE检查 https://github.com/aspnet/AspNetIdentity 和ASP.NET MVC检查:https://github.com/aspnet/Identity

以下是身份验证在 MVC ASP.NET 的工作方式

  1. 在登录表单中输入用户名和密码,然后单击"登录"按钮
  2. 单击登录按钮 服务器端代码检查输入的用户名和密码是否存在于数据库中
  3. 如果输入的用户名和密码存在于数据库中,则服务器端代码将创建cookie并将它们存储在浏览器中(而不是数据库中)
  4. 在每个页面请求中,IIS 检查身份验证 cookie 是否存在。
  5. 如果 cookie
  6. 存在,则用户已登录,如果 cookie 不存在,则用户未登录

由于身份验证 cookie 存储在浏览器中,而不是存储在 IIS 中。停止和启动 IIS 对用户登录状态没有影响。

回答您的具体问题:那么后端如何知道在上面的步骤 5 中登录了用户? 答:在来自 IIS 的任何页面请求上。与其他信息一起,存储在浏览器中的身份验证 Cookie 被发送到后端/IIS。然后,后端/IIS 检查身份验证 cookie 是否有效。如果 cookie 在后端有效/IIS 知道用户已登录。如果 cookie 无效,则后端/IIS 知道用户未登录。

进一步了解此过程。我建议先阅读有关 cookie 的信息,然后再阅读有关 ASP.NET 身份验证的信息。

希望这有帮助!

最新更新