登录、登出的技术实现

578 阅读2分钟

当下很多Web框架都封装了登录,登出的功能。调用起来也非常简单。但是这个功能具体是如何实现的呢?今天就来说明一下其中的原理。

  1. 注册

首先,我们要创建一个新用户。假设从表单上post了以下信息

{
    name: "test_user",
    pass: "password"
}

服务器接受到信息后会把这些信息保存进数据库。

为了安全,我们一般会把密码加密再加入数据库。 加密方法有一下几种,如果没有特别需求的话,建议使用bcrypt

1. md5
2. sha256
3. bcrypt
4. scrypt
5. argon2
etc.

这样我们的新用户就创建好了。

  1. 登录

简单的说登录就是拿着用户名和密码在数据库里查询的过程。 如果在数据库里找到了相应的数据,就可以说正在访问页面的人就是这个账号的主人,给他继续访问的权限。

但这种做法有一个问题。就是HTTP协议是不包含状态的,我们没法通过协议来记住下一次访问是同一个人这件事。

也就是说以后的每一次登录都要手动输入用户名和密码。这就很麻烦了。 于是人们就想到了用cookie + session来做登录认证。

  1. 通过cookie + session来认证

在步骤2中,在数据库中查询到用户的用户名和加密后的密码后,服务器会生成一个唯一sesson_id和一些在访问过程中会用到的信息。然后把这个session_id存入用户的cookie中。

以后每一次用户访问网页,都会将cookie中的session_id发送给服务器,如果服务器在session中找到了session_id,就继续逻辑处理,不然就当用户没有登录,跳转至登录界面。

这样就免去了用户每次输入用户民和密码的麻烦。

  1. 登出

为了解除登录状态,需要删除服务器session和用户端cookie。

这样下次访问的时候会因为找不到session_id被跳转至登录页面。