andrewlim/rememberme

易于使用的 RememberMeCookie 类,仅依赖 PDO

1.0.0 2022-05-04 20:36 UTC

This package is auto-updated.

Last update: 2024-09-05 14:17:15 UTC


README

易于使用的 RememberMeCookie 类,仅依赖 PDO。

特性

  • 遵循 PSR-12 规范
  • 与 PHP 5.4 及以上版本兼容
  • cookie 值的哈希(默认 SHA256)存储在数据库中

设置

您可以直接包含 RememberMeCookie.php 文件,或者通过 composer 安装

composer require andrewlim/rememberme

默认情况下,类会在名为 "rememberme" 的表中查找和存储 cookie 数据。它需要以下 4 个列:cookiehash, userid, createdat, expiresat

-- MySQL / SQLite
CREATE TABLE rememberme (
    cookiehash VARCHAR(128) PRIMARY KEY,
    userid     VARCHAR(128) NOT NULL,
    createdat  DATETIME     NOT NULL,
    expiresat  DATETIME     NULL
);
-- postgresql
CREATE TABLE rememberme (
    cookiehash VARCHAR(128) PRIMARY KEY,
    userid     VARCHAR(128) NOT NULL,
    createdat  TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL,
    expiresat  TIMESTAMP(0) WITHOUT TIME ZONE NULL
);

用法

登录成功后,调用 create() 来创建 rememberme cookie

// Create a RememberMeCookie and pass a PDO instance
$rememberMeCookie = new \AndrewLim\RememberMe\RememberMeCookie($pdo);

// Create a cookie, store its hash and and send it to browser
// The userid variable is a foreign key id to identify the user
$row = $rememberMeCookie->create($userid);

// Redirect to secure page
if ($row) {
    header('Location: dashboard.php');
}

调用 verify() 来检查 rememberme cookie

// If rememberme cookie is valid exists and is valid
$row = $rememberMeCookie->verify();
if ($row) {
    header('Location: dashboard.php');
    return;
}
// Invalid
else {
    header('Location: login.php');
    return;
}

调用 logout() 来从浏览器中移除 rememberme cookie 并删除数据库中的哈希

$rememberMeCookie->logout();
header('Location: login.php');

配置

在调用 create() 之前,您可以配置 cookie 的创建和存储

$rememberMeCookie = new \AndrewLim\RememberMe\RememberMeCookie($pdo);

// Table name
$rememberMeCookie->table = 'customtable';

// Cookie name
$rememberMeCookie->cookiename = 'dashboard_cookie';

// hashing algorithm
$rememberMeCookie->algo = 'sha512';

// 2 years expiry
$rememberMeCookie->expires = time() + (2 * 365 * 24 * 60 * 60);