如何在 PHP 登录系统中实现'记住我”功能以增强用户体验?

Barbara Streisand
发布: 2024-11-10 00:06:02
原创
644 人浏览过

How to Implement

具有“记住我”功能的PHP登录系统[重复]

为了增强用户体验,您可以实现“记住我” PHP 登录系统中的功能,允许用户在多个会话中保持登录状态。

安全Cookie 存储

存储持久 Cookie 的最佳实践是使用数据库中名为 auth_tokens 的单独表:

CREATE TABLE `auth_tokens` (
    `id` integer(11) not null UNSIGNED AUTO_INCREMENT,
    `selector` char(12),
    `token` char(64),
    `userid` integer(11) not null UNSIGNED,
    `expires` datetime,
    PRIMARY KEY (`id`)
);
登录后复制

登录后

登录后,为选择器和生成唯一的随机值token:

if ($login->success && $login->rememberMe) {
    $selector = base64_encode(random_bytes(9));
    $authenticator = random_bytes(33);

    setcookie(
        'remember',
        $selector . ':' . base64_encode($authenticator),
        time() + 864000, // 10 days
        '/',
        'yourdomain.com',
        true, // TLS-only
        true  // http-only
    );

    // Insert data into the database
    $database->exec(
        "INSERT INTO auth_tokens (selector, token, userid, expires) VALUES (?, ?, ?, ?)",
        [
            $selector,
            hash('sha256', $authenticator),
            $login->userId,
            date('Y-m-d\TH:i:s', time() + 864000)
        ]
    );
}
登录后复制

重新认证

if (empty($_SESSION['userid']) && !empty($_COOKIE['remember'])) {
    list($selector, $authenticator) = explode(':', $_COOKIE['remember']);

    // Retrieve row from the database
    $row = $database->selectRow(
        "SELECT * FROM auth_tokens WHERE selector = ?",
        [
            $selector
        ]
    );

    // Verify hash and set session
    if (hash_equals($row['token'], hash('sha256', base64_decode($authenticator)))) {
        $_SESSION['userid'] = $row['userid'];
        // Regenerate a login token as per previous example
    }
}
登录后复制

详细信息

  • 选择器提供36位抗碰撞性,防止暴力攻击。
  • 验证器264 位随机性提供了充足的不可预测性。
  • 哈希可以降低潜在信息泄露后的冒充风险。
  • 使用 hash_equals() 进行哈希可以防止定时攻击。
  • 分离选择器和验证器优化数据库查找。

以上是如何在 PHP 登录系统中实现'记住我”功能以增强用户体验?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板