在 PHP 中实现基于 Token 的认证机制,并在用户关闭页面后使 Token 失效,可以通过以下步骤实现:
1. 生成 Token 并存储
在登录时生成 Token 并存储到数据库:
// 登录成功后的处理
function generateAndStoreToken($userId) {
// 生成唯一Token
$token = bin2hex(random_bytes(32)); // 生成64字符的随机字符串
// 计算过期时间(例如1小时后过期)
$expires = date('Y-m-d H:i:s', strtotime('+1 hour'));
// 存储到数据库
$db = new PDO('mysql:host=localhost;dbname=yourdb', 'username', 'password');
$stmt = $db->prepare("INSERT INTO user_...
构思
由于互联网的机制,在不使用 Websocket 的情况下,是不能够长时间与用户持续保持连接的。所以我这里打算使用 COOKIE 与数据库信息进行校验。 其中用户端储存的 Token 是经过 hash 加密过的数据,数据库存储的数据是不经过 hash 加密的原始数据。最终通过一系列计算后使用 PHP 自带的 hash 校验函数进行 Token 验证。
为什么我前面说实现一端登录,另一端自动注销呢? Token 在执行登陆之前,会生成初始 Token 数据,这部分数据是没有经过加密而且没有进行组合的,存储在 SESSION 中。在用户执行登陆时候,自行生成4位随机数做基础计算数据,随后检查目前服务器时间戳与用户端生成的 Token 数据进行比对,以及获...
一、用户认证问题
最初互联网用户认证一般流程如下:
1、用户登录,向服务器发送用户名和密码。
2、服务器验证用户信息通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。
3、服务器向用户返回一个 session_id,客户端获取后将这个session_id写入 Cookie。
4、用户随后的每一次请求,都会通过 Cookie,将 session_id 传回服务器。
5、服务器收到 session_id,找到前期保存的数据,由此得知用户的身份。
这种模式的问题在于:
1.扩展性不好。单机当然没有问题,如果是服务器集群,或者是跨域的服务导向架构,就要求 session 数据共享,每台服务器都能够读取 session
2.服务端为了存贮...
随着互联网和移动互联网的快速发展,网站和应用的用户量不断增加,用户数据的安全性和权限控制变得尤为重要。而传统的基于用户名和密码的鉴权方式在一定程度上存在安全风险和复杂性。而基于Token的鉴权机制,既安全又简单。
什么是Token鉴权机制?
Token鉴权机制是一种无状态的鉴权方式,用户登录认证成功后,后端服务器生成一个Token并返回给客户端。客户端每次请求都在请求头中携带Token,后端通过校验Token的合法性来鉴权,从而保证了用户的权限和安全性。
下面我们来手把手教你使用PHP实现基于Token的鉴权。
步骤一:生成Token
要实现Token鉴权,首先我们需要生成Token。
在PHP中,我们可以使用JWT(JSO...