ghalambaz/remember-me

RememberMe 是一个PHP库,用于在一段时间内持久化会话和记住用户,无需再次登录!

安装: 269

依赖: 0

建议者: 0

安全性: 0

星标: 3

关注者: 2

分支: 1

类型:application

1.1 2019-03-14 22:14 UTC

This package is auto-updated.

Last update: 2024-09-15 10:30:30 UTC


README

用户可以在网站上保持登录状态,时长由您决定

记住我帮助您实现“记住我”功能,登录后用户在20或30分钟后无需再次登录,因为会话会保存到数据库中,您可以将会话保存多长时间都可以!例如1年!!!

安装

步骤1:使用composer添加包

composer require ghalambaz/remember-me

步骤2:创建数据库表

-- ----------------------------
-- Table structure for tbl_acl_autologin
-- ----------------------------
CREATE TABLE `tbl_acl_autologin`  (
  `id` int(10) UNSIGNED NOT NULL,
  `token` char(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `created` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0),
  `data` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `used` int(1) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`, `token`) USING BTREE
) ENGINE = MyISAM CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Table structure for tbl_acl_sessions
-- ----------------------------
CREATE TABLE `tbl_acl_sessions`  (
  `sid` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `expiry` int(10) UNSIGNED NOT NULL,
  `data` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  PRIMARY KEY (`sid`) USING BTREE
) ENGINE = MyISAM CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

#Just example for tbl_acl_users
CREATE TABLE `tbl_acl_users`  (
  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uuid` binary(36) NOT NULL,
  `username` char(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `password` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `email` char(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `mobile` bigint(20) NOT NULL,
  `created` datetime(0) NOT NULL,
  `touched` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0),
  `img` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `status` enum('pending','block','delete','active') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `fk_unique_mobile`(`mobile`) USING BTREE,
  UNIQUE INDEX `fk_unique_email`(`email`) USING BTREE,
  UNIQUE INDEX `fk_unique_username`(`username`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

您必须有一个包含用户名的用户表

在我们的示例中,我有一个名为 tbl_acl_users 的表,其中包含一个名为 username 的列

使用方法

步骤1:初始化Properties对象

//initialize Properties Object
$properties = new \RememberMe\Properties();
$properties->setDb("user","password","db_name","host"); //your database access info
$properties->setTableUsers("tbl_acl_users"); // table name that you already save your users data
$properties->setColUsername("username"); // column that save username,email or any id of your users in tbl_users

您需要全局访问此对象

步骤2:更改PHP会话处理器

session_set_save_handler(new \RememberMe\RememberMeSessionHandler($properties));
session_start(); //starting session - check for duplication!
$_SESSION['active'] = time();

请在代码的第一行放置步骤2

使用示例

如何登录用户?

在您使用用户名和密码登录用户后,需要持久化会话数据。因此,您需要运行 persist 函数

//strucure of persist function
function persist(\RememberMe\Properties $properties,$username)
{
    //after checking that 
    session_regenerate_id(true);
    $_SESSION[$properties->getSessUname()] = $username;
    $_SESSION[$properties->getSessAuth()] = true;
    // persisting login
    $r = new \RememberMe\RememberMe($properties);
    $r->start();
}
如何检查用户是否现在登录或1年后?
‍‍‍‍//example of check that is user is logged in or not (need to login again)
function is_loggedin($properties)
{
    if (isset($_SESSION[$properties->getSessAuth()]) || isset($_SESSION[$properties->getSessPersist()])) {
        return true;
    } else {
        $autologin = new \RememberMe\RememberMe($properties);
        $autologin->login();
        if (!isset($_SESSION[$properties->getSessPersist()]))
            return false;
        else
            return true;
    }
}
如何登出?
‍//example of logout function structure 
function logout($properties)
{
    $autologin = new \RememberMe\RememberMe($properties);
    $autologin->logout(true);
}
如何更改会话生命周期?

$days = 365;
$properties->setLifetimeDays($days);

‍‍‍ ‍‍