ghalambaz / remember-me
RememberMe 是一个PHP库,用于在一段时间内持久化会话和记住用户,无需再次登录!
1.1
2019-03-14 22:14 UTC
Requires
- php: >=5.5.0
- ext-pdo: *
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);