跳到主要内容

16--基于持久化令牌方案实现自动登录

前言

在上一章节中,一一哥 带各位基于散列加密方案实现了自动登录,并且给各位介绍了散列加密算法,其实还有另一种自动登录的实现方案,也就是基于持久化令牌方案来进行实现。接下来请跟 一一哥 学习这种方案该怎么实现吧。

一. 持久化令牌方案简介

1. 持久化令牌方案

有的小伙伴会问,既然我们要基于持久化令牌来实现自动登录,那啥是持久化令牌啊?所以 一一哥 先给大家做个概念解释。

所谓的持久化令牌的实现方案,其实在交互上与我们前面章节讲的散列加密方案一致,只不过是在用户勾选Remember-me之后,将生成的token令牌发送到用户浏览器,并在用户下次访问系统时读取该令牌进行认证。不同的是,持久化令牌方案采用了更加严谨的安全性设计,也就是安全性更好一些。

在持久化令牌方案中,最核心的是series和token两个值,这两个值都是用MD5散列计算生成的随机字符串。不同的是,series仅在用户使用密码重新登录时更新,而 token 会在每一个新的session会话中都重新生成

2. 持久化令牌方案优点

我们前面已经学习了基于散列算法的自动登录方案了,为啥还要再学习持久化方案呢?肯定是因为它有独特之处吧。

首先,持久化令牌方案 避免了散列加密方案中,一个令牌可以同时在多端登录的问题,这是因为每个session会话都会引发token的更新,即每个token仅支持单实例登录。

其次,自动登录不会导致series变更,但每次自动登录都需要同时验证 series和 token两个值,所以这样的设计会更安全。因为当该令牌还未使用过自动登录就被盗取时,系统会在非法用户验证通过后刷新 token 值,此时在合法用户的浏览器中,该token值已经失效。当合法用户使用自动登录时,由于该series对应的 token 不同,系统可以推断该令牌可能已被盗用,从而做一些处理。例如,清理该用户的所有自动登录令牌,并通知该用户可能已被盗号等。

了解了持久化令牌的概念和优点之后,接下来就跟着 壹哥 进行代码实现吧。

二. 持久化令牌方案的代码实现

1. 创建persistent_logins表

在持久化令牌方案中,是要把令牌进行持久化保存的,那么把令牌持久化到哪里去呢?我们首选数据库!