我认为authenticaton的内部机制应该使用令牌设置cookie并在服务器上存储相同的令牌,然后在每个请求上比较来自cookie和服务器的令牌,如果它们相等则用户登录我不知道服务器在哪里存储令牌,可能在Session或其他东西(不是持久的),但我确信在服务器重新启动服务器的令牌后#39 ; s商店应该被清理,因此具有旧cookie的用户无法进行身份验证。但是在我重启服务器之后的一个实践中,用户仍然经过身份验证并且可以访问页面,因为User.Identity.IsAuthenticated返回true。在我看来错了。即使我从我的数据库中删除此用户(我使用成员资格),因为我不希望此用户再次访问并重新启动我的服务器,该用户仍然经过身份验证。谁能解释一下呢?
答案 0 :(得分:3)
Source 的回答
以下是身份验证过程的工作原理。
- 您在web.config中设置了一些内容,包括登录页面所在的位置,登录有多长时间以及是否使用滑动
到期(如果用户在您的帐户上处于活动状态,则应该延长时间 位点)- 用户访问您的网站,输入用户名和密码。
- 该信息已发布到您的服务器。您获取该信息,验证它是否正确(验证)。如果是 正确的是,服务器然后发出一个称为
的加密cookie FormsAuthenticationTicket注意 - 这可能在
中有不同的名称 新的身份,但原则相同。- Cookie的内容包括用户名和登录的截止日期等项目。
- 在每个请求中,服务器查看cookie集合以获取身份验证cookie。如果找到,它会解密它,读取值和 确定这是否仍然是有效的cookie(到期时间)。一旦它 有来自cookie的用户信息,服务器可以使用这个 确定用户是否获得资源授权的信息
请求(按用户名查找)。- 如果cookie不存在,或已过期,或者当用户注销时,cookie将从cookie集合中删除。现在,如果用户尝试转到仅供授权用户使用的资源,则会将用户重定向回登录页面。
希望这有帮助。