基于cookie的身份validation如何工作?

有人能给我一步一步的描述如何基于cookie的身份validation的作品? 我从来没有做过涉及authentication或cookies的任何事情。 浏览器需要做什么? 服务器需要做什么? 按什么顺序? 我们如何保持安全?

我一直在阅读有关不同types的身份validation和cookie的问题,但是我想了解如何将两者结合使用的基本描述 – 我只读过它们经常一起使用,但无法find如何描述。

一个cookie基本上只是一个字典中的一个项目。 每个项目都有一个键和一个值。 对于身份validation,密钥可以是“用户名”,值是用户名。 每次向网站发出请求时,浏览器都会在请求中包含cookie,主机服务器将检查cookie。 因此,身份validation可以自动完成。

要设置一个cookie,您只需将其添加到服务器在请求后发回的响应。 浏览器会在收到响应后添加cookie。

您可以为Cookie服务器端configuration不同的选项,例如到期时间或encryption。 encryption的cookie通常被称为签名的cookie。 基本上服务器会encryption字典项中的键和值,所以只有服务器可以利用这些信息。 那么cookie将是安全的。

浏览器将保存由服务器设置的cookie。 在浏览器向服务器发送的每个请求的HTTP标头中,都会添加cookie。 它只会为设置它们的域添加Cookie。 Example.com可以设置一个cookie,并在浏览器的HTTP头中添加选项,以将cookie发送回子域,如sub.example.com。 浏览器将cookie发送到不同的域是不可接受的。

我意识到这是晚了几年,但我想我可以扩大Conor的答案,并增加一点点的讨论。

有人能给我一步一步的描述如何基于cookie的身份validation的作品? 我从来没有做过涉及authentication或cookies的任何事情。 浏览器需要做什么? 服务器需要做什么? 按什么顺序? 我们如何保持安全?

第1步:客户>注册

在别的之前,用户必须注册。 客户端向服务器发送HTTP请求,其中包含他/她的用户名和密码。

第2步:服务器>处理注册

服务器收到此请求并在将数据库中的用户名和密码存储之前散列密码。 这样,如果有人访问您的数据库,他们将不会看到您的用户的实际密码。

第3步:客户端>用户login

现在您的用户login。他/她提供他们的用户名/密码,并再次将其作为HTTP请求发送到服务器。

第4步:服务器>validationlogin

服务器在数据库中查找用户名,对提供的login密码进行散列,并将其与数据库中以前散列的密码进行比较。 如果不检出,我们可以通过发送401状态码并结束请求来拒绝他们的访问。

第5步:服务器>生成访问令牌

如果一切都检出,我们将创build一个访问令牌,唯一标识用户的会话。 仍然在服务器中,我们用访问令牌做两件事:

  1. 将其存储在与该用户关联的数据库中
  2. 将其附加到响应cookie以返回给客户端。 请务必设置到期date/时间来限制用户的会话

此后,Cookie将被附加到客户端和服务器之间的每个请求(和响应)。

第6步:客户端>发出页面请求

回到客户端,我们现在已经login了。每当客户端请求一个需要授权的页面(即他们需要login),服务器就从cookie获取访问令牌,并根据这个令牌进行检查在与该用户关联的数据库中。 如果检出,授予访问权限。

这应该让你开始。 请务必在注销时清除Cookie