You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需JS和SQL,用HTML+PHP实现登录登出并存储账号密码到TXT

实现无JS、无SQL的PHP+TXT登录/登出功能

首先修正你的HTML表单:把method="get"改成method="post"(GET会把密码暴露在URL里,极度不安全),同时增加操作选项区分登录和注册:

<form method="post" action="form.php">
  <label>用户名</label>
  <input type="text" id="name" name="name" autocomplete="off" required>
  <label>密码</label>
  <input type="password" id="password" name="password" autocomplete="off" required>
  <div>
    <input type="radio" name="action" value="login" checked> 登录
    <input type="radio" name="action" value="register"> 注册
  </div>
  <input type="submit" value="提交">
</form>

接下来是核心的form.php逻辑,用TXT存储用户数据,绝对不要明文存密码,用PHP自带的加密/验证函数处理:

<?php
// 启动会话,维护登录状态
session_start();

// 定义用户数据存储文件路径
$userFile = 'users.txt';

// 处理表单提交
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $username = trim($_POST['name']);
    $password = $_POST['password'];
    $action = $_POST['action'];

    // 避免用户名包含分隔符(这里用冒号分割用户名和密码哈希)
    if (strpos($username, ':') !== false) {
        echo '用户名不能包含冒号';
        exit;
    }

    // 读取现有用户数据
    $users = [];
    if (file_exists($userFile)) {
        $lines = file($userFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
        foreach ($lines as $line) {
            list($user, $hash) = explode(':', $line, 2);
            $users[$user] = $hash;
        }
    }

    switch ($action) {
        case 'register':
            if (isset($users[$username])) {
                echo '该用户名已存在,请直接登录';
            } else {
                // 加密密码并追加写入文件
                $hash = password_hash($password, PASSWORD_DEFAULT);
                file_put_contents($userFile, "$username:$hash\n", FILE_APPEND);
                echo '注册成功,请登录';
            }
            break;

        case 'login':
            if (isset($users[$username]) && password_verify($password, $users[$username])) {
                // 记录登录状态
                $_SESSION['username'] = $username;
                echo '登录成功!<a href="logout.php">点击登出</a>';
            } else {
                echo '用户名或密码错误';
            }
            break;
    }
} else {
    // 非POST请求时,检查登录状态
    if (isset($_SESSION['username'])) {
        echo '当前登录用户:' . $_SESSION['username'] . ' <a href="logout.php">点击登出</a>';
    } else {
        echo '<p>请通过表单登录或注册</p>';
    }
}
?>

最后是登出功能的logout.php:

<?php
session_start();
// 销毁会话清除登录状态
session_destroy();
// 跳转回登录页面
header('Location: form.php');
exit;
?>

关键注意事项

  • 这种TXT存储仅适合小型测试场景,生产环境务必使用数据库,同时开启HTTPS传输避免密码被拦截。
  • 确保users.txt有正确的读写权限,且不要放在网站根目录下,防止被直接访问。
  • password_hash()会自动生成盐值,无需额外存储。

内容的提问来源于stack exchange,提问作者tsx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 07:46:19