博客
关于我
记住密码
阅读量:489 次
发布时间:2019-03-06

本文共 2648 字,大约阅读时间需要 8 分钟。

<div class="article-container"><header class="article-header">[login与记住密码实现](/技术绪记/PHP/28/title)\

[一位开发者的技术文章,帮助你理解如何在PHP中实现自动登录功能。]

[在网页开发中,需要实现记住密码或自动登录的功能时,通常会使用cookie进行处理。本文将介绍如何通过PHP实现记住密码,一周内免登录以及其他规则的自动登录功能。]

1. 功能需求分析

当用户登录时,选择"记住我"或者设置超时规则时,系统需要记录相应的认证信息,以便在下次访问时自动登录。常见的规则包括:

  • 一周内免登录:用户不需要每次都登录。
  • 一月内免登录:用户可以在一个月内无需重新登录。
  • 用户选择记住:用户主动选择记录登录状态。

系统应当根据用户的选择,在数据库中存储相应的cookie信息,并在下次访问时进行验证。

2. 实现方法概述

整个流程包括:

  • 用户登录时的处理逻辑

    • 用户输入username和password。
    • If选择记住登录状态,生成随机token并存储认证信息到cookie中。
    • 将cookie信息存储到数据库对应的user table中。
  • 自动登录验证

    • 检查cookie是否存在。
    • 从数据库中取出用户信息,验证cookie中的认证信息是否正确。
    • 如果验证成功,自动建立session并跳转到指定页面。
    • 如上述验证失败,显示对应的错误信息并跳转到登录页面。
  • 3. 具体实现代码

    下面将展示实现这一功能的关键代码部分,并附有详细注释。

    login.php:

    [ \begin{php} // 接收用户提交的数据 $username = trim($_POST['username']); $password = md5(trim($_POST['password']));

    // 获取请求的url $refUrl = $_GET['req_url'];

    // 判断是否需要记住登录状态 $remember = isset($_POST['remember']) ? $_POST['remember'] : 0;

    // 检查必填字段是否存在 if (empty($username) || empty($password)) { $err_msg = "请填写完整的用户名和密码"; } else { // 从数据库中查找用户信息 $userRow = getuser-info($username, $password);

    if (empty($userRow)) {
    $err_msg = "用户名或密码错误";
    } else {
    // 成功登录,设置session
    $_SESSION['user_info'] = $userRow;
    // 如果用户选择记住登录状态,设置cookie
    if ($remember) {
    // 将username和随机生成的token存入cookie
    setcookie("remember_username", $username, 1, time() + 60 * 60, '127.0.0.1');
    setcookie("remember_token", md5(uniqid()), 1, time() + 60 * 60, '127.0.0.1');
    }
    // 跳转到指定页面
    if (strpos($refUrl, 'login.php') === false) {
    header("Location: $refUrl");
    } else {
    header("Location: main_user.php");
    }
    }

    } \end{php} ]

    checklogin函数

    [ \begin{php} function checklogin() { // 检查用户是否已经登录 if (!isset($_SESSION['user_info'])) { // 检查是否有存储cookie的信息 if (empty($_COOKIE['remember_username']) || empty($_COOKIE['remember_token'])) { // 没有cookie信息,需要重新登录 header("Location: login.php?req_url=" . $_SERVER['REQUEST_URI']); } else { // 验证cookie信息 $username ==$_COOKIE['remember_username']; $token = $_COOKIE['remember_token']; if ($token !== md5(uniqid())) { // 验证失败,跳转到登录页面 header("Location: login.php?req_url=" . $_SERVER['REQUEST_URI']); } else { // 验证成功,获取用户信息并设置session $userRow = getuser-info($username, $password); if (!empty($userRow)) { $_SESSION['user_info'] = $userRow; } else { // 用户信息错误,跳转到登录页面 header("Location: login.php?req_url=" . $_SERVER['REQUEST_URI']); } } } } } \end{php> ]

    4. 注意事务

  • token生成:使用uniqid生成唯一的token,然后将这个token加密存储到数据库中,以确保每次登录时的认证信息不被窃取。

  • 权限控制:确保无法直接访问checklogin函数或在非登录页面调用,以防未授权访问。

  • 兼容性:确保生成的cookie在客户端和服务器端时间一致,避免时间差异导致的误匹配。

  • 安全性:使用https协议传输cookie,降低被截获的风险。同时,建议将cookie的域名限制在当前网站域名内,防止跨站攻击。

  • 通过以上方法,可以实现灵活且安全的记住密码功能,满足用户多样化的需求。

    转载地址:http://thhdz.baihongyu.com/

    你可能感兴趣的文章
    Nim游戏
    查看>>
    NIO ByteBuffer实现原理
    查看>>
    Nio ByteBuffer组件读写指针切换原理与常用方法
    查看>>
    NIO Selector实现原理
    查看>>
    nio 中channel和buffer的基本使用
    查看>>
    NIO基于UDP协议的网络编程
    查看>>
    NISP一级,NISP二级报考说明,零基础入门到精通,收藏这篇就够了
    查看>>
    Nitrux 3.8 发布!性能全面提升,带来非凡体验
    查看>>
    NI笔试——大数加法
    查看>>
    NLog 自定义字段 写入 oracle
    查看>>
    NLP 基于kashgari和BERT实现中文命名实体识别(NER)
    查看>>
    NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器
    查看>>
    NLP_什么是统计语言模型_条件概率的链式法则_n元统计语言模型_马尔科夫链_数据稀疏(出现了词库中没有的词)_统计语言模型的平滑策略---人工智能工作笔记0035
    查看>>
    NLP学习笔记:使用 Python 进行NLTK
    查看>>
    NLP的神经网络训练的新模式
    查看>>
    NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估
    查看>>
    NLP:使用 SciKit Learn 的文本矢量化方法
    查看>>
    Nmap扫描教程之Nmap基础知识
    查看>>
    Nmap端口扫描工具Windows安装和命令大全(非常详细)零基础入门到精通,收藏这篇就够了
    查看>>
    NMAP网络扫描工具的安装与使用
    查看>>